这是一个入门级的技术问题...
使用圆形霍夫变换来寻找圆形部分。为此,我会首先在图像上进行局部阈值处理。
im=rgb2gray(imread('Ly7C8.png'));
imbw = thresholdLocally(im,[2 2]);
props = regionprops(imbw,'Area','PixelIdxList','MajorAxisLength','MinorAxisLength');
[~,indexOfMax] = max([props.Area]);
approximateRadius = props(indexOfMax).MajorAxisLength/2;
radius=round(approximateRadius);
h = circle_hough(edge(imbw), radius,'same');
[~,maxIndex] = max(h(:));
[i,j,k] = ind2sub(size(h), maxIndex);
center.x = j; center.y = i;
figure;imagesc(im);imellipse(gca,[center.x-radius center.y-radius 2*radius 2*radius]);
title('Finding the circle using Hough Trans.');
![在圆圈内选择:](https://istack.dev59.com/MH7wQ.webp)
[y,x] = meshgrid(1:size(im,2),1:size(im,1));
z = (x-j).^2+(y-i).^2;
f = (z<=radius^2);
im=im.*uint8(f);
编辑:
要开始阈值图像并通过查看直方图,找到第一个局部极大值并循环迭代直到找到2个分离的段,使用bwlabel进行分段。
p=hist(im(im>0),1:255);
p=smooth(p,5);
[pks,locs] = findpeaks(p);
bw=bwlabel(im>locs(1));
i=0;
while numel(unique(bw))<3
bw=bwlabel(im>locs(1)+i);
i=i+1;
end
imagesc(bw);
![enter image description here](https://istack.dev59.com/6LIB3.webp)
现在可以通过从圆中取出两个标记部分来获得中间部分,剩下的就是中间部分(+一些光晕)。
bw2=(bw<1.*f);
但是在进行了一些中值滤波之后,我们得到了更加合理的结果。
bw2= medfilt2(medfilt2(bw2))
我们一起得到:
imagesc(bw+3*bw2)
![这里输入图片描述](https://istack.dev59.com/EgtBN.webp)
最后一部分是真正的“粗略方法”,我相信您已经使用的工具将带来更好的结果...