Matlab如何确定沿边缘边界的粗糙度?例如,Matlab如何确定第一幅图像是平滑的而第二幅图像是粗糙的?
编辑:我还希望Matlab能够检测同一图像中哪些边缘是平滑的和粗糙的:
答案 0 :(得分:0)
如果您感兴趣的图像都与您显示的图像类型相同,则可能是一种简单的方法(需要“图像处理工具箱”):
smooth = imread('smooth.png');
figure(1);
imshow(smooth);
smoothOpened = (smooth, ones(21));
figure(2);
imshow(smoothOpened);
smoothDiff = smooth - smoothOpened;
figure(3),
imshow(smoothDiff);
smoothDifference = sum(smoothDiff(:) > 0)
rough = imread('rough.png');
figure(4);
imshow(rough);
roughOpened = imopen(rough, ones(21));
figure(5);
imshow(roughOpened);
roughDiff = rough - roughOpened;
figure(6);
imshow(roughDiff);
roughDifference = sum(roughDiff(:) > 0)
smoothDifference = 2592
roughDifference = 11328
(此处省略了图像输出。)
基本上,我们进行形态开放(imopen
)来消除“尖峰”。您可以更改结构元素的形状和大小。我在这里使用了一个简单的21 x 21正方形。然后,我们确定原始图像与“打开的”图像之间的差异。大于0的像素数可以近似为“平滑度”或“粗糙度”。正如我所说,这种方法可能仅适用于问题中所示的图像。
一个人应该使用二进制图像,这样imopen
也会生成二进制图像。为了简单起见,我使用了通用的uint8
版本,导致xxxOpened
图像中的像素值0