bwconncomp的第N个最大组成部分,包括背景

时间:2011-12-18 18:49:32

标签: matlab image-processing

我的问题有两个部分。第一个是:

如何将背景作为组件包含在bwconncomp函数中,因为它的默认行为不包括它。

另外,这是我的另一个问题,如何根据我使用bwconncomp获得的内容选择第n个最大的组件。

目前我正在考虑这样的事情,但这不起作用: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 个答案:

答案 0 :(得分:3)

  1. 要查找背景,您可以在图片上使用'not'操作
  2. 'PixelIdxList'不是您所需要的。您需要'Area'属性。
  3.   

    函数FindBackgroundAndLargestBlob
          x = imread('peppers.png');
          I = x(:,:,2);
          level = graythresh(I);
          bw = im2bw(I,level);
          b = bwlabel(bw,8);
          rp = regionprops(b,'Area','PixelIdxList');
          areas = [rp.Area];
          [未使用,indexOfMax] =最大(区域);
          DISP(indexOfMax);
      端

    更新: 您也可以使用bwconncomp来实现:

      

    函数FindBackgroundAndLargestBlob
          x = imread('peppers.png');
          I = x(:,:,2);
          level = graythresh(I);
          bw = im2bw(I,level);
          c = bwconncomp(bw,4);
          numOfPixels = cellfun(@ numel,c.PixelIdxList);
          [unused,indexOfMax] = max(numOfPixels);
          图; imshow(BW);
          bw(c.PixelIdxList {indexOfMax})= 0;
          图; imshow(BW);
      结束

    将产生以下结果: Before enter image description here