【发布时间】:2018-04-10 00:49:54
【问题描述】:
我正在尝试编写一个脚本来计算给定 X 射线的两根骨头之间的角度。
X 射线样本如下所示:
我正在尝试计算每个骨骼的中线,本质上是一条沿着骨骼两侧中点的线,然后比较两条中线之间的角度。
我曾尝试使用 OpenCV 来获取骨骼的轮廓,但它似乎不够准确并且会获取大量额外数据。我被困在下一步如何移动以及如何计算中线。我对图像处理很陌生,但有使用 Python 的经验。
使用 OpenCV 结果获取边缘:
OpenCV 代码:
import cv2
# Load the image
img = cv2.imread("xray-3.jpg")
# Find the contours
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(img,60,200)
im2, contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
hierarchy = hierarchy[0] # get the actual inner list of hierarchy descriptions
# For each contour, find the bounding rectangle and draw it
cv2.drawContours(img, contours, -1, (0,255,0), 3)
# Finally show the image
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
【问题讨论】:
-
没有愚蠢的超前卫超白文本标签有机会获得数据吗?
-
使用分类器读取宽基/窄骨。你应该找到两个,一个向上/一个向下。然后从左到右对骨骼进行从黑到白到黑的水平扫描。在中心放置一个点。在不同的垂直位置执行多次扫描。连接每个分类器中的点以定义该骨骼的角度。
-
@zipzit horizontal 扫描会系统地将水平线与骨骼相交的中心相对于骨骼中心向左/向右移动,因为骨骼本身是不垂直于水平线,其边界是凹形的,不是线性的。我想说的是:要通过“水平”扫描找到中心,您必须在骨骼的正交方向上进行扫描,但为此您必须知道骨骼的角度,这就是我们想要的首先要找到...
-
@AndreyTyukin 。没有。拿一张纸、一条直尺和一支铅笔。试试吧。我不知道正确的几何描述。它就像 1700 年代的木匠使用尺子轻松细分测量值一样。真是老派。也许那发生在1600年代。您可以从任何角度进行扫描,只要扫描的两端穿过远离关节区域的骨骼即可。您只想在中间放置一个点,然后连接这些点。 Link
-
@zipzit 问题是x射线图像上没有“远离关节的区域”,至少它不足以将骨骼的图像近似为具有两个平行边的矩形.这是骨骼小角度的合理近似值,但如果它正是我们所追求的小角度,我认为这不会给出特别好的近似值。
标签: python image opencv graph hough-transform