ROI を使用したイメージ比較ツールの作成
この例では、新しい ROI 関数を使用して対話型のイメージ比較ツールを作成する方法を説明します。イメージを処理する際には、多くの場合、関数がイメージに与える影響を視覚的に評価する必要があります。その中には、エッジ フィルターのように明確に区別できる効果もあります。一方で、詳しく調べる必要がある微妙な影響もあります。
ワークスペースへのサンプル イメージの読み取り
サンプル イメージをワークスペースに読み取った後、このイメージのグレースケール バージョンを作成します。イメージを左右に並べてモンタージュに表示します。
im = imread("peppers.png");
imgray = im2gray(im);
figure
montage({im,imgray})
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