2012-11-15 41 views
2

我想在灰度图像上的两条边之间画一条线并估计它的长度。需要估计股骨头的直径。我尝试过使用houghlines并最终绘制(见下文),但无法获得正确的代码。我是matlab新手,这可能是为什么。会感谢任何提示!使用matlab绘制并估计图像中一条线的长度

for img = imread(sample); 
figure,imshow(img) 
hold on 
p1 = [10,100]; 
p2 = [100,20]; 
plot([p1(2),p2(2)],[p1(1),p2(1)],'Color','r','LineWidth',2); 
hold off; 
pause; 
end 
+1

你知道一个像素代表多少实际距离吗? –

+0

而且:无论你认为它有多糟糕,你现在可以发布你现在拥有的任何东西吗?给我们一个更好的地方,从...开始,只需在您的问题下面进行编辑。 –

+0

此外,代表一般问题的示例图片将有助于... –

回答

0

如果你知道行

p1 = [ 10 100]; 
p2 = [100 20]; 

的起点和终点,然后以像素为单位的距离会简单地从勾股定理如下:

dist = sqrt((p2-p1) * (p2-p1).'); 

然后由但是乘以这个许多毫米像素代表以获得实际距离。

如果你不知道点,但手动绘制它们(或许通过计算机视觉帮助,但从来没有完全依赖它:),请参阅bdecaf的答案。

+0

嗯,我不这样认为,这是我可以使用的一般情节代码。我想要做的是在未知点与另一点之间画一条线。我还在论坛'ButtonDownFcn'上发现了这个功能,@ startDragFcn – carro

0

我不太确定你是如何获得积分的。假设它不是微不足道的。

对于类似的问题,我的用户总是希望能够手动标记点(他们不相信计算机视觉)。代码如下所示:

pos = ginput(2); 
l = line(pos(:,1),pos(:,2),'Color','r','Marker','o'); % just for visualization 
distance = norm(pos(1,:)-pos(2,:)); 
+0

非常感谢!它的工作原理,如果l是以像素为单位的行的长度,那么pos值必须是x,y坐标的开始/结束行是正确的?现在我只需要了解如何找出像素代表多少毫米。我想一种方法是用一个已知长度的对象进行x射线测量,然后从那里进行数学运算。 – carro

+0

不幸的是我对Xrays不熟悉 - 确保你需要一些透视校正。最简单的方法是在图片中添加一个参考对象,这样,当图片被预处理时,您将被保存。就我个人而言,我只是使用硬币 - 即使它不是完全平面的,椭圆的长边仍然具有正确的长度,但由于它的圆形形状。这很容易获得;) – bdecaf

+0

哦,对你的问题'l'只是图片中的线条的句柄 - 为了计算它不是必须的 - pos - 包含所有的坐标 - 一列是[[x; y] 。这很有用 - 因为你可以用delete(l)来删除它 - 以防你想纠正你自己。 – bdecaf

相关问题