Remove inner part of the Image
6 次查看(过去 30 天)
显示 更早的评论
Hi All
I have multiple images and I want to remove the inner part the image but don't know how I can remove this.by using mask or any other approach ? Can anybody help me with this
these are some image . and I want a unique approach that work for all the images,some of the images are attached
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/191658/image.jpeg)
1st one in input and second one is like output
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/191659/image.jpeg)
0 个评论
回答(3 个)
Oindri
2018-7-4
Hi, You may try, first detecting the edge of the inner circle because its abrupt change in intensity, which will be easily detectable. Once you have defined that boundary, replace all internal pixels with black pixels. Given the varied nature of boundary, apply automatic detection of boundary.
KSSV
2018-7-4
编辑:KSSV
2018-7-4
files = dir('*JPG') ;
nx = 512 ; ny = 512 ;
N = length(files) ;
I = cell(N,1) ;
for i = 1:N
I{i} = imread(files(i).name);
I{i} = imresize(I{i},[nx ny]) ;
end
C = round([nx ny]/2) ; % center of the image
R = 60. ; % radius of circle
th = linspace(0,2*pi,500) ;
xc = C(1)+R*cos(th) ;
yc = C(1)+R*sin(th) ;
%
I2 = cell(N,1) ;
x = 1:ny ; y = 1:nx ;
[X,Y] = meshgrid(x,y) ;
idx = inpolygon(X(:),Y(:),xc,yc) ;
for i = 1:N
T = I{i}(:,:,1) ;
T(idx) = 10 ;
I2{i} = repmat(T,1,1,3) ;
imshow(I2{i})
end
3 个评论
Image Analyst
2018-7-4
The attached algorithm seem to work with both your images. The function findcircles() didn't seem to work, so I thresholded followed by repeated erosions until the background and inner zone separated into two regions, then took the inner region and expanded it back out and used it as a mask to erase the inner zone of the gray scale image. You can adjust stepSize to erase a little closer to the inner boundary if you want.
Results for the first image:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/189757/image.png)
And for the other image:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/189759/image.png)
6 个评论
Image Analyst
2018-7-6
You can use imfreehand() to lasoo the occasional photo that it didn't work for. See my attached demo. Otherwise it will take you quite a bit of work to make it more automatic. It will be tricky and could take a bit of time to develop the algorithm. You could consider hiring someone if you can't do it yourself. Or else contact the Mathworks and they'll do it for you.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!