Еще один простой способ подсчитать количество белых пятен на изображении - сначала преобразовать изображение в черно-белое, удалить белую рамку, а затем подсчитать, сколько их осталось. Используйте bwlabel
и определите значение, отображаемое во второй выходной переменной. Чтобы очистить белую рамку, используйте imclearborder
. Кстати, это предполагает, что у вас есть панель инструментов обработки изображений:
%// Read image directly from StackOverflow
im = im2bw(imread('http://i.stack.imgur.com/9hU5O.png'));
%// Remove white border surrounding image
im = imclearborder(im);
%// Count how many white spots there are
[~,num] = bwlabel(im);
Я получил:
>> num
num =
18
Теперь в случае вашего реального примера у вас есть несколько зашумленных пикселей. Есть несколько способов избавиться от этих изолированных полос. Мне удалось использовать морфологическое отверстие с квадратным структурирующим элементом 5 x 5. Как только вы это сделаете, это удалит все зашумленные пиксели, имеющие площадь менее 5 x 5, и оставит только любую форму, площадь которой больше, чем форма 5 x 5. Используйте комбинацию imopen
и _ 6_, чтобы помочь вам в этом:
%// Read in the new image and convert to black and white
im = im2bw(imread('http://i.stack.imgur.com/HCvAa.png'));
%// Clear the border
im = imclearborder(im);
%// Define the structuring element
se = strel('square', 5);
%// Open the image
out = imopen(im, se);
%// Now count the objects
[~,num] = bwlabel(out);
Я получил:
>> num
num =
18
Кроме того, если вам интересно, вот как выглядит очищенное изображение:
>> imshow(out);
Эта обработка была произведена на новом изображении, которое вы разместили, и вы можете видеть, что зашумленные белые пиксели были удалены из-за операции открытия.
person
rayryeng
schedule
23.11.2015