Если ваши представляющие интерес изображения имеют тот же тип, что и показанный вами, простой подход может быть (Необходим инструмент обработки изображений):
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 х 21 здесь.После этого мы определяем разницу между оригиналом и «открытым» изображением.Количество пикселей больше 0 может быть приблизительным для «гладкости» или «шероховатости».Как я уже сказал, этот подход может работать только для изображений, как показано в вопросе.
Следует использовать двоичные изображения, чтобы imopen
также генерировал двоичные изображения.Для простоты я использовал общую версию uint8
, в результате чего значения пикселей 0 xxxOpened.