我正在写一个MATLAB程序,它可以从正方形中得到不同的圆圈。该过程涉及将图像转换为二进制形式。我使用大小为10的平均滤镜来消除噪音,因为这些照片都是用低分辨率相机拍摄的。我按如下方式计算blob的圆度。
blobMeasurements = regionprops(BW_rotated,'Perimeter', 'Area', 'FilledArea')
perimeters = [blobMeasurements.Perimeter];
filledAreas = [blobMeasurements.FilledArea];
roundness = (4 * pi * filledAreas) ./ (perimeters .^2);
roundness = max(roundness);
我尝试了一些网上的图片。完美圆的圆度为1.我使用0.8的阈值(相当宽)来判断图像是否是圆的图像。但是,这种方式我得不到很好的结果。例如,使用以下图像:
左边的圆圈是原始图像,右边的图片是最终的二进制图像。应当注意,预先获得每个图像的长轴,并且将图像旋转该量,以确保图像中的所有形状与水平轴对齐。虽然二进制图像在图中看起来较小,但它只是被旋转了。
对于这个特殊的图像,我得到0.78的圆度,这是非常低的,因为它是一个明确无误的圆圈。对于包含正方形的图像,我有时会获得超过0.85的圆度值。
有人可以帮我解决这个问题吗?非常感谢任何方向。