How to perform imopen on ROI without affecting other region

1 view (last 30 days)
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."

Answers (1)

DGM
DGM on 29 Apr 2023
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!