ROI を使用したイメージ比較ツールの作成
この例では、新しい ROI 関数を使用して対話型のイメージ比較ツールを作成する方法を説明します。イメージを処理する際には、多くの場合、関数がイメージに与える影響を視覚的に評価する必要があります。その中には、エッジ フィルターのように明確に区別できる効果もあります。一方で、詳しく調べる必要がある微妙な影響もあります。
ワークスペースへのサンプル イメージの読み取り
サンプル イメージをワークスペースに読み取った後、このイメージのグレースケール バージョンを作成します。関数 imshowpair
を使用して、2 つのイメージを表示します。montage
オプションを使用すると、イメージが並べて表示されます。
im = imread('peppers.png'); imgray = rgb2gray(im); figure; imshowpair(im,imgray,'montage')
ROI を使用して、重なった 2 つのイメージのアルファ層 (透明度) を設定し、1 つのイメージで ROI の内側のみが透けて表示されるようにします。この選択的な表示は ROI に従うため、対話形式で移動できます。新しい Figure と座標軸を作成します。
hFigure = figure();
hAxes = axes('Parent', hFigure);
両方のイメージを同じ座標軸上に重ねます。
hImage1 = imshow(im, 'Parent', hAxes); drawnow; % Ensure the image gets drawn. hold on; hImage2 = imshow(imgray, 'Parent', hAxes); hold off;
座標軸上に円 ROI を作成します。
centerLocation = [220, 100]; radius = 60; hC = images.roi.Circle(... 'Parent', hAxes,... 'FaceAlpha',0,... 'Center',centerLocation,... 'Radius', radius);
ROI (円) の位置の変化をリッスンするリスナーを作成します。関数 updateAlpha の定義は、この例の終わりで行います。
addlistener(hC,'MovingROI', @updateAlpha);
最初に手動でコールバックを実行します。
updateAlpha(hC)
領域へのズームインのシミュレーションを行います。
hC.Parent.XLim = [75 370]; hC.Parent.YLim = [0 205];
次のファイルには、このイメージ比較ツールを実装する関数のソース コードが含まれています。このコードは他に 2 つのイベントをリッスンします。ユーザーが 't' キー ('T' キー) を押すと、上に表示されるイメージが切り替わります。また、このコードはマウスのスクロール ホイールをリッスンして、ROI の半径を増減します。
edit helperImageComparer
ツール使用中のアニメーション
アルファ層を更新するコールバック関数
ROI オブジェクトの移動時にアルファ層を更新するコールバック関数は次のとおりです。
function updateAlpha(hC, ~) hImages = findobj(hC.Parent,'Type','image'); % Create a BW mask from the Circle ROI mask = hC.createMask(hImages(1).CData); % Set the alpha data so that the underlying image shows through % only inside the circle set(hImages(1),'AlphaData', ~mask); end
参考
Circle
| addlistener
| createMask