最佳答案
13 条回复
myisland 发表于 2022-8-2 08:45 您好,请问我用这个算法提取后是这个效果,一方面就是它只显示了小范围,另一方面就是它效果也不好,我就是用我这个帖子的线的那个照片,能不能麻烦您帮我解决一下 |
南风依旧很柔 发表于 2022-8-3 20:51 可以考虑做直线拟合 |
南风依旧很柔 发表于 2022-8-3 20:51 限制一下找到的线段的长度,从结果来看目前的阈值太小了。 |
myisland 发表于 2022-8-4 09:25 的却,是这样的问题但是我感觉效果还是不好,这是我的代码%%Hougn变换 I=imread('图片2.png'); f=rgb2gray(I);%RGB-->gray f=f(round(end/99):end,1:round(end/1));%调整显示照片范围大小 BW=edge(f,'canny'); %edge:以灰度图像为输入,'canny'为边缘检测算子 % 输出BW为二值图像,边缘处为白(255)其余部分为黑(0) imshow(f) title('原始图像') [row,col]=size(BW); rhomax=round((row*row+col*col)^0.5); A=zeros(2*rhomax,180); %这里,实际上rho的取值范围为[-rhomax,rhomax], %但是为了后面进行数量统计,转变为[1,2rhomax] for m=1:row for n=1:col if BW(m,n)>0 %判断为边缘 for theta=1:180 r=theta/180*pi; %角度转换 rho=round(m*cos(r)+n*sin(r)); %Hough变换 rho=rho+rhomax+1; %坐标平移 %这里的理解,首先matlab中数组是从1开始计数,所以+1; %数组坐标不能<0,所以 +rhomax A(rho,theta)=A(rho,theta)+1; %数量统计 end end end end [rho,theta]=find(A>115); %超过130个点视为共线,rho列号,theta行号 nma=length(rho); figure,imshow(BW) for i=1:nma hold on m=1:row; r=theta(i)/180*pi; n=(rho(i)-rhomax-m*cos(r))/(0.0001+sin(r)); plot(n,m,'w-','LineWidth',6); end title('hough线检测'); |
lyqmath 发表于 2022-8-4 09:25 您好,请问用什么办法呢lol |
南风依旧很柔 发表于 2022-8-4 14:34 方便的话,可以上传一下图片文件 用霍夫做直线后,还需要做合并,将共线的直线做组合 |
lyqmath 发表于 2022-8-4 15:40 您好,这个就是我提取点云后连接点生成的图片 |
lyqmath 发表于 2022-8-4 15:40 您好,能不能加一下我“微型”18337571229,像您请教一下 |
其实有点本末倒置了。 1. 你有点云的数据,有边缘的确切坐标; 2. 按照你的场景,轮廓被假设为由直线段组成。 可以脱离图像处理的方法来实现,直接使用轮廓坐标。 以任意一点为起点,不断将周围的点拉进来,利用“共线”程度(R2等指标)可以判断周围点是否应该位于同一条直线。平行且距离很近的线直接合并到点数最多的线上。这样线段的端点是已知的;P |
myisland 发表于 2022-8-5 09:17 对的,针对点云来处理是最好的,弄成图像再处理的话那还不如直接用遥感图像来做,但是我写不出来代码,大佬指教一下 |
myisland 发表于 2022-8-5 09:17 这是我在网上看到的一篇论文 |
Powered by Discuz! X3.4
© 2001-2022