[已解决] 通过hough变换得到四个点,如何求两点之间的中点坐标

[复制链接]
Dikk 发表于 7 天前
新人,求大佬指教

最佳答案


WarnerChang 发表于 7 天前
Dikk 发表于 2021-4-30 11:56
这边Hough变换有产生两条直线,4个端点,但是只能用两个。帮忙看下,感谢
...

提取两条直线四个端点坐标如下,附加的其他计算就不多说了吧!
xy12=[lines.point1];
x1=xy12(1);
y1=xy12(2);
x2=xy12(3);
y2=xy12(4);

xy34=[lines.point2];
x3=xy34(1);
y3=xy34(2);
x4=xy34(3);
y4=xy34(4);

11 条回复


TouAkira 发表于 7 天前
x1, y1 与 x2, y2 的中点,不就是(x1 + x2)/2, (y1 + y2)/2么

Dikk 发表于 7 天前
TouAkira 发表于 2021-4-30 08:32
x1, y1 与 x2, y2 的中点,不就是(x1 + x2)/2, (y1 + y2)/2么

具体的算法要怎么写?原理是知道的

图片2.png

Dikk 发表于 7 天前
TouAkira 发表于 2021-4-30 08:32
x1, y1 与 x2, y2 的中点,不就是(x1 + x2)/2, (y1 + y2)/2么

哥,还在吗?请多告诉一点

WarnerChang 发表于 7 天前
Dikk 发表于 2021-4-30 10:55
哥,还在吗?请多告诉一点

把代码和数据上传一下呢!

Dikk 发表于 7 天前
WarnerChang 发表于 2021-4-30 10:59
把代码和数据上传一下呢!

clc;
I=imread('C:\Users\Dikk\Desktop\图像采集\1\03.bmp');
figure;
imshow(I);
title('原图.bmp');
J=2*I+10;
figure;
imshow(J);
title('线性变换后的图像');
thresh=graythresh(J);
L=im2bw(J,thresh);
figure;
imshow(L);
title('二值化图');
A=imcomplement(L);
figure;
imshow(A);
title('取反后的图像');
se1=strel('disk',5);%这里是创建一个半径为5的平坦型圆盘结构元素
A2=imerode(A,se1);
figure;
imshow(A2);%先腐蚀
title('腐蚀后的图像');
B=[ones(20,20)];
A3=imdilate(A2,B);%图像A2被结构元素B膨胀
figure,imshow(A3);
title('膨胀后的图像');
B=[ones(430,800)];
A4=imclose(A3,B);%直接闭运算
figure;
imshow(A4);
title('直接闭运算');
A5=imopen(A3,B);%直接开运算
figure;
imshow(A5);
title('直接开运算');
A6=A4-A5;
figure;
imshow(A6);
title('图像相减');
C=[ones(200,690)];
A7=imopen(A6,C);
figure;
imshow(A7);%得到上面的凸起部分
title('再次开运算');
BW=edge(A7,'canny');
figure;
imshow(BW);
title('canny边缘检测');
[H,T,R] = hough(BW);%计算二值图像的标准霍夫变换,H为霍夫变换矩阵,I,R为计算霍夫变换的角度和半径值
figure;
imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');%hough变换的图像
xlabel('\theta'), ylabel('\rho');
axis on,axis square,hold on;
P  = houghpeaks(H,3);%提取3个极值点
x = T(P(:,2));
y = R(P(:,1));
plot(x,y,'s','color','white');%标出极值点
lines=houghlines(BW,T,R,P);%提取线段
figure;
imshow(I);
title('Hough直线检测图');
hold on;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');%画出线段
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');%起点
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');%终点
end
x1=[lines(i).point1(1) , lines(i).point2(1)]

Dikk 发表于 7 天前
WarnerChang 发表于 2021-4-30 10:59
把代码和数据上传一下呢!

哥,你看下。Hough变换得到的直线两端点怎么引用,还有就是两点中点坐标怎么得到。

WarnerChang 发表于 7 天前
Dikk 发表于 2021-4-30 11:15
哥,你看下。Hough变换得到的直线两端点怎么引用,还有就是两点中点坐标怎么得到。
...

给我张图像吧

Dikk 发表于 7 天前

这边Hough变换有产生两条直线,4个端点,但是只能用两个。帮忙看下,感谢

抓取点就是凸起那部分的两侧

抓取点就是凸起那部分的两侧

WarnerChang 发表于 7 天前
Dikk 发表于 2021-4-30 11:56
这边Hough变换有产生两条直线,4个端点,但是只能用两个。帮忙看下,感谢
...

提取两条直线四个端点坐标如下,附加的其他计算就不多说了吧!
xy12=[lines.point1];
x1=xy12(1);
y1=xy12(2);
x2=xy12(3);
y2=xy12(4);

xy34=[lines.point2];
x3=xy34(1);
y3=xy34(2);
x4=xy34(3);
y4=xy34(4);
回复此楼

Dikk 发表于 7 天前
WarnerChang 发表于 2021-4-30 12:17
提取两条直线四个端点坐标如下,附加的其他计算就不多说了吧!
xy12=[lines.point1];
x1=xy12(1);

哥,还有一个。坐标得到之后怎么在坐标系中输出出来。我只知道plot,用着不行

WarnerChang 发表于 7 天前
Dikk 发表于 2021-4-30 13:21
哥,还有一个。坐标得到之后怎么在坐标系中输出出来。我只知道plot,用着不行 ...

啥意思,输出出来?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表