N-й по величине компонент bwconncomp, включая фон - PullRequest
2 голосов
/ 18 декабря 2011

Мой вопрос состоит из двух частей. Первый из них:

Как включить фон в качестве компонента в функцию bwconncomp, поскольку его поведение по умолчанию не включает его.

Кроме того, и это другой мой вопрос, как я могу выбрать n-й по величине компонент на основе того, что я получаю, используя bwconncomp.

В настоящее время я думал о чем-то подобном, но это не работает: P

function out = getComponent(im,n)
CC = bwconncomp(im,4);
%image is an binary image here

numPixels = cellfun(@numel,CC.PixelIdxList);
sortedPixels = sort(numPixels,'descend');
w = sortedPixels(n);
[largest, index] = find(numPixels==w);
im(CC.PixelIdxList{index}) = 0;
out = im;

Но это совсем не работает. Но я не слишком уверен, что делает CC.PixelIdxList{index}, это просто изменение элементов в массиве. Я также нахожу это немного неопределенным, что именно PixelIdxList.

1 Ответ

3 голосов
/ 19 декабря 2011
  1. Чтобы найти фон, вы можете использовать на изображении операцию «не»
  2. «PixelIdxList» - это не то, что вам нужно.Вам необходимо свойство 'Area' .

функция FindBackgroundAndLargestBlob
x = imread ('peppers.png');
I = x (:,:, 2);
level = Graythresh (I);
bw = im2bw (I, level);
b = bwlabel (bw, 8);
rp = regionprops (b, 'Area ',' PixelIdxList ');
area = [rp.Area];
[неиспользовано, indexOfMax] = max (областей);
disp (indexOfMax);
end

Обновление: Вы также можете сделать это с помощью bwconncomp:

функция FindBackgroundAndLargestBlob
x = imread ('peppers.png');
I = x (:,:, 2);
level = Graythresh (I);
bw = im2bw (I, level);
c = bwconncomp (bw, 4);
numOfPixels = cellfun (@ Numberl, c.PixelIdxList);
[не используется, indexOfMax] = max (numOfPixels);
figure; imshow (bw);
bw (c.PixelIdxList {indexOfMax}) = 0;
figure; imshow (bw);
end

Что даст следующие результаты: Before enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...