Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

参考

| |

関連するトピック