首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线简化图像处理

线简化图像处理
EN

Stack Overflow用户
提问于 2015-07-02 10:15:35
回答 1查看 423关注 0票数 2

我试图使用douglas-peucker算法来简化我的连接组件,我使用bwlabel获取连接的组件,然后将它发送到douglas algorithm.Here是我正在使用的算法的链接- 道格拉斯-派克算法matlab

这是我的密码-

代码语言:javascript
复制
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);

这是我最初的输入图像-

这是我的1st组件,我应用了Douglas-Peucker算法-

这是算法的结果-

Douglas的代码可以在我提到的above.So,的链接中找到,我的问题是为什么整个组件的简化没有发生,我如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2015-07-02 17:33:36

我相信你想要识别图像中有多少直线段。我做了一些类似的形态学击中,并能够分割这些品系,虽然不是在他们的全部长度。

我准备了一个垂直线结构元素(SE),然后通过围绕它的中心旋转60度和120度来创建另外两个SE。我用这些SE来腐蚀原始图像,然后得到连接的组件。

代码语言:javascript
复制
im = imread('IWVlt.jpg');
bw = im2bw(im, graythresh(im));

% SEs
w = 15;
line = zeros(w);
line(:, round(w/2)) = 1;

bw1 = zeros(size(bw));

for i = 1:3
    bw1 = bw1 + imerode(bw, line);
    line = imrotate(line, 60, 'nearest');
end

[lbl, n] = bwlabel(bw1, 8);

figure, imshow(bw1)
figure, imshow(label2rgb(lbl))

结果,我得到了25个组件。通过改变代码中的w,您可以最小化错误。

对于w=9,这是在检测所有段时所能得到的最小值w,我得到了26个分量。您可以过滤掉太小的组件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31181841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档