How to perform imopen on ROI without affecting other region

3 次查看(过去 30 天)
Hello, I tried to perform imopen function only on ROI without affecting other region but got error. My input image is human's iris in greyscale format.
i=imread('snowflakes.png'); %input image
h=imshow(i);
e=imellipse(gca,[60 45 60 60]); %ROI is ellipse shape at the center of image
mask=createMask(e,h); %mask of center image
j=imopen(mask,strel('disk',5)); %imopen
m=roifilt2(j,i,mask); %imopen on ROI, other region not affected
imshow(m)
"Error using imfilter Expected input number 2, H, to be one of these types: double Instead its type was logical."

回答(1 个)

DGM
DGM 2023-4-29
The thing you're doing isn't what you think you're doing. You're opening the elliptical mask itself, not the image. You're then using the logical mask as the filter kernel in a linear filtering operation. Neither make sense.
If you really want to use roifilt2() for this, you can.
% read image
inpict = imread('snowflakes.png'); % input image
% create elliptical mask using ROI tools
hi = imshow(inpict);
emask = imellipse(gca,[60 45 60 60]); % ROI is ellipse shape at the center of image
mask = createMask(emask,hi); % mask of center image
f = @(x) imopen(x,strel('disk',5)); % create function handle
opened = roifilt2(inpict,mask,f); % imopen on ROI, other region not affected
imshow(opened)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by