如何在每个点上画一条垂直于中轴线的线并保存强度值?

10次浏览(过去30天)
这就是我为了得到中轴线(骨架)所写的。我= imread(“gray.tif”);skelImg = bwmorph(im, 'skel', inf);图;imshow (skelImg);抓住;
2的评论

登录评论。

答案(2)

布鲁诺Pop-Stefanov
布鲁诺Pop-Stefanov 2014年10月24日
看一下文件 overlayLines.m 我已经附上了。这个函数在RGB图像上绘制红线。当然,您可以将其修改为单通道图像。此外,如果您检查循环,您将看到如何找到直线交叉的像素值。
例子:
I = imread(“autumn.tif”);
X = [10,200;50,60];
Y = [140,160;20,200];
J = overlayLines(I,x,y);
imshow (J)
1评论
Hamed Lamei Ramnadi
Hamed Lamei Ramnadi 2014年10月28日
嗨,布鲁诺,谢谢你的回复,但实际上没有成功。也许你没明白我的意思。我可以通过给出x和y来画线。我需要一个代码来画这些垂直于每个点的中轴的线。
干杯

登录评论。


拉
2014年10月28日
你好,我已经解决了同样的问题。我的建议是这样的(不是最好最快的解决方案,但它是有效的):
1.计算直线的角度
如果真正的
%的代码
Xdiff = X-Gpoint2X-GpointX;
Ydiff = Gpoint2Y-GpointY;
角= tan (Ydiff / Xdiff);
结束
Gpoint和Gpoint2是直线上的两点GpointX是点gx坐标
2.做
如果真正的
角=角* (1);
%的代码
结束
做垂线
3.使用
如果真正的
函数[Line LineIndexes]=ComputeLineCoords(角度,GpointX,GpointY, shift,L)
X =大小(L, 2)
StepElevation = tan(角)* 1
Line(1:X)=round(渐变*(1:X)- GpointX*渐变+GpointY+shift);
OutOfboundsFromS = min(找到(线(1:X) < 1) 1;
OutOfboundsFromE = min(找到((1:X) >行大小(L, 2))) + 1;
如果(OutOfboundsFromS = = 1)
LineIndexes = [OutOfboundsFromS];
其他的
如果(OutOfboundsFromE = =大小(L, 2))
LineIndexes = [OutOfboundsFromE];
其他的
LineIndexes = [1];
结束
结束
OutOfboundsToS = max(找到((1:X) >行大小(L, 2)));
OutOfboundsToE = min(找到(线(1:X) < 1) 1;
如果((OutOfboundsToE) < = 1行)
LineIndexes = [LineIndexes OutOfboundsToE];
其他的
如果(OutOfboundsToS > = X)
LineIndexes = [LineIndexes OutOfboundsToS];
其他的
LineIndexes = [LineIndexes X];
结束
结束
结束
在LineIndexes中获取直线所在像素(line)及其包围框的索引。
输入的角度是GpointX -因为我写它为XY,你必须使用点的Y坐标的线应该放置GpointY -因为我写它为XY,你必须使用点的X坐标的线应该放置shift - 0应该是好的,但你必须用它做一个小L -图像的实验来获得大小
你可能会改变一下尺寸,但这对我来说是可行的

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!