如何在二进制图像中找到特定点?
Posted
技术标签:
【中文标题】如何在二进制图像中找到特定点?【英文标题】:How can I find specific points in binary images? 【发布时间】:2021-12-11 10:30:39 【问题描述】:我正在大学开始一项研究,主题是能够使用 AI 计算视网膜区域。我们规定的第一部分是使用 u-net 分割视网膜的两个重要部分。二是利用分割的结果找到重点并进行计算。
因此,在下图中,我显示了使用 u-net 分割每个区域的输出(红色注释不是分割的一部分)。我尝试代表我想在第一个和第二个块中找到的区域。一旦这样做,我可以在合并它们时计算这些点之间的距离。 所以,我的问题是:我可以使用什么样的技术来读取像素以便找到我标记的坐标?
OpenCV 是一个可以帮助我的库吗?这是我第一次处理这种问题,所以感谢任何建议或指导。
【问题讨论】:
我无法完全理解这 3 个分割区域的含义。您只需要检测图像中的那些标记部分吗?您可能需要澄清问题 二进制图像的基本测量。也许您需要学习 OpenCV 教程 (docs.opencv.org)。可能涉及或不涉及轮廓。坐标的最小/最大计算为您提供这些点。 @YunusTemurlenk 是的,我试着澄清一下。希望现在更好。 @ChristophRackwitz 谢谢你,我会看到 【参考方案1】:使用 OpenCV: 可以使用 connectedComponentsWithStats() 方法检测边距。
connectivity = 8
output = cv2.connectedComponentsWithStats(binary_img, connectivity, cv2.CV_32S)
stats = output[2] # stat matrix
first_blob_left = stats[0,cv2.CC_STAT_LEFT]
first_blob_right = stats[0,cv2.CC_STAT_RIGHT]
second_blob_left = stats[1,cv2.CC_STAT_LEFT]
second_blob_right = stats[1,cv2.CC_STAT_RIGHT]
if first_blob_left < second_blob_left:
dist = second_blob_left - first_blob_right
else:
dist = first_blob_left - second_blob_right
可以用同样的方法检测最深点:
connectivity = 8
output = cv2.connectedComponentsWithStats(binary_img, connectivity, cv2.CV_32S)
stats = output[2] # stat matrix
blob_top = stats[0,cv2.CC_STAT_TOP]
blob_height = stats[0,cv2.CC_STAT_HEIGHT]
deepest_point_y_position = blob_top + blob_height
注意:此代码未经测试,可能包含一些拼写错误。但是,这个想法仍然保持不变,并且应该不费吹灰之力。
看看
labels = output[1]
“labels”是输入图像所在位置的数组,其中 blob 的每个像素都标记有相同的值。这应该可以帮助您找到边距的坐标
【讨论】:
以上是关于如何在二进制图像中找到特定点?的主要内容,如果未能解决你的问题,请参考以下文章