Matlab如何计算沿边缘边界的粗糙度?

时间:2019-02-27 01:22:19

标签: matlab image-processing

Matlab如何确定沿边缘边界的粗糙度?例如,Matlab如何确定第一幅图像是平滑的而第二幅图像是粗糙的?

编辑:我还希望Matlab能够检测同一图像中哪些边缘是平滑的和粗糙的:

1 个答案:

答案 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