经过一些预处理,边缘检测和细化后,得到了下图,图像为双色
并且为了去除区域内的孤立像素,我使用了扩张作为
se90 = strel('line', 2, 90);
se0 = strel('line', 2, 0);
BWsdil = imdilate(Edge, [se90 se0]);
垂直扩张,然后是水平扩张
实际上我想要分割在矩形(椭圆状结构)中标记的对象。 注意到黑色矩形在扩张期间破裂 如果我增加阈值,我将丢失底部矩形中的段。 如果我继续这个结果,我最终会出错,即使没有预处理,基本的分割算法也无法正常工作。请帮忙
你可以建议任何其他技术来改善面膜 如果我在渐变图像上进行连通分量分析。我将得到椭圆的边界而不是如图所示的椭圆
我尝试了hough变换,但我得到了一些糟糕的结果
close all;clear all
I=imread('Sub1.png');
load edge
rotI = imrotate(I,33,'crop');
[H,T,R] = hough(Edge);
imshow(H,[],'XData',T,'YData',R,...
'InitialMagnification','fit');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
P = houghpeaks(H,25,'threshold',ceil(0.3*max(H(:))));
x = T(P(:,2)); y = R(P(:,1));
plot(x,y,'s','color','white');
lines = houghlines(Edge,T,R,P,'FillGap',5,'MinLength',7);
figure, imshow(rotI), hold on
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
% Plot beginnings and ends of lines
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
% Determine the endpoints of the longest line segment
len = norm(lines(k).point1 - lines(k).point2);
if ( len > max_len)
max_len = len;
xy_long = xy;
end
end