【发布时间】:2015-07-02 10:15:35
【问题描述】:
我正在尝试使用douglas-peucker 算法来简化我的连接组件。我使用bwlabel 获取连接组件并将其发送到douglas 算法。这是我正在使用的算法的链接-
Douglas-Peucker Algorithm matlab
这是我的代码-
clc;
image=imread('mmm1.jpg');
image = im2bw(image);
[imx imy]=size(image);
n1=zeros(imx,imy);
I=zeros(imx,imy);
L = bwlabel(image,8) ;%Calculating connected components
[r,c] = find(L==1); %Using 1st connected component
n1=zeros(imx,imy);
rc = [r c];
[ps mm] = dpsimplify(rc,1); %Douglas-Peucker algorithm
%To display original component
%___________________________________________________________________
[sx sy]=size(rc);
for j=1:sx
x1=rc(j,1);
y1=rc(j,2);
n1(x1,y1)=1;
end
figure,imshow(n1);
%___________________________________________________________________
%To display component after simplification
n1=zeros(imx,imy);
[sx sy]=size(mm);
for j=1:sx
x1=rc(j,1);
y1=rc(j,2);
n1(x1,y1)=1;
end
figure,imshow(n1);
这是我的原始输入图像-
这是我应用了Douglas-Peucker 算法的1st 组件-
这是算法的结果-
Douglas-Peucker 的代码可以在我上面提到的链接中找到。所以,我的问题是为什么整个组件没有进行简化?我该如何解决这个问题? p>
【问题讨论】:
-
我猜是因为您需要描述“线”的点或线,而不是像素。尝试先获取图像的骨架。 uk.mathworks.com/help/images/ref/bwmorph.html
-
PD:您为什么要简化这些行?你能指望什么?它们尽可能简单。
-
@AnderBiguri 这是因为当我运行
corner detection algorithm时,这张图片中的许多倾斜线没有得到足够的简化,它们给出了错误的结果。角检测无法在这些图像中运行,因为它也检测到了方式许多角点 -
那你要的是你图像的形态骨架! (我认为)
-
嗨!我为我们做了一个聊天室,这样我们就可以讨论与 MATLAB 相关的事情,这些事情可能离题,或者跨越的时间超过了 cmets 框中的内容。有时间就来看看吧! chat.stackoverflow.com/rooms/81987/matlab
标签: algorithm matlab image-processing