使用 R 在二进制图像中进行线检测和距离测量
Line Detection and Distance Measurement in Binary Images using R
我真的非常感谢任何(理论上 or/and 实用的)指导我如何检测、计算二值图像上的线数(通常为 2 或 1)并测量它们之间的最短距离.这些线是先前处理的产物(rgb->grey->canny edge->cropping->dilation)。我目前正在尝试使用 R 的成像器包,但我可以想到像 Matlab 或 Scilab 这样的替代方案。
非常感谢,
image
task
我想出了下面的方法...
第一步
从左上角或其他地方开始,沿着边缘(无论哪种方式)前进,直到找到与边缘相交的白色像素。我从左边往下走,在 0,167 处找到了那个。
第 2 步
从该像素开始用黑色填充。这将完全删除左下角的线,只留下右上角的线。如果此时检查图像的平均亮度并且它为零,则只有一条线并且停止。
步骤 3
使用欧几里德距离形态计算与白色像素的距离。我在此处使用 ImageMagick 在命令行中执行此操作,但我认为您可以在 OpenCV、Matlab 或 R 中执行此操作。
convert lines.jpg -threshold 50% -negate -morphology Distance euclidean:4 euclidean.png
第 4 步
现在沿着左下角的线(您之前暂时删除的线)继续前进,找到该线上最暗的像素。那就是离左上线最近的那个,它的亮度就是距离。
使用霍夫变换怎么样?这是一种非常常见的检测二值图像中直线的算法。我认为它在 PET package 中可用。或者,我也建议使用 OpenCV。
我真的非常感谢任何(理论上 or/and 实用的)指导我如何检测、计算二值图像上的线数(通常为 2 或 1)并测量它们之间的最短距离.这些线是先前处理的产物(rgb->grey->canny edge->cropping->dilation)。我目前正在尝试使用 R 的成像器包,但我可以想到像 Matlab 或 Scilab 这样的替代方案。
非常感谢,
image task
我想出了下面的方法...
第一步
从左上角或其他地方开始,沿着边缘(无论哪种方式)前进,直到找到与边缘相交的白色像素。我从左边往下走,在 0,167 处找到了那个。
第 2 步
从该像素开始用黑色填充。这将完全删除左下角的线,只留下右上角的线。如果此时检查图像的平均亮度并且它为零,则只有一条线并且停止。
步骤 3
使用欧几里德距离形态计算与白色像素的距离。我在此处使用 ImageMagick 在命令行中执行此操作,但我认为您可以在 OpenCV、Matlab 或 R 中执行此操作。
convert lines.jpg -threshold 50% -negate -morphology Distance euclidean:4 euclidean.png
第 4 步
现在沿着左下角的线(您之前暂时删除的线)继续前进,找到该线上最暗的像素。那就是离左上线最近的那个,它的亮度就是距离。
使用霍夫变换怎么样?这是一种非常常见的检测二值图像中直线的算法。我认为它在 PET package 中可用。或者,我也建议使用 OpenCV。