How to perform imopen on ROI without affecting other region

S
shahrizan jamaludin · Jan 19, 2024 · 2.1K views
Question
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."
Expert Answer
Profile picture of John Michell
John Michell PhD Expert
Answered Aug 24, 2026
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.webp'); % 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)

 

Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!