Получите позицию объекта, используя bwconncomp в Matlab

Для сегментации в матлабе есть функция bwconncomp. Он может подсчитать количество обнаруженных объектов.

  Im=imread('Mountain.ppm');
  [Seg_Im] = normalize_segmentation(Im);
  Im_filt=medfilt2(Seg_Im,[3 3]);

  se=strel('disk',2);
  Seg_Im = imclose(Im_filt,se);
  Obj_Im= bwconncomp(Seg_Im,6)

  Obj_Im = 

Connectivity: 6
   ImageSize: [30 32]
  NumObjects: 1
PixelIdxList: {[129x1 double]}

И когда я получаю доступ к PixelIdxList, максимальное значение равно 834.

Что это за 834? Потому что размер изображения всего 30x32.

И как мы можем получить позицию объекта, используя информацию PixelIdxList/bwconncomp?


person user3624526    schedule 16.05.2014    source источник


Ответы (1)


Взглянув на руководство, вы узнаете, что это линейный индекс:

 PixelIdxList:   1-by-NumObjects cell array where the kth element
                 in the cell array is a vector containing the linear
                 indices of the pixels in the kth object.

Если вы хотите, чтобы они были в формате x и y, используйте функцию ind2sub:

[x,y]=ind2sub(size(Im), Obj_Im.PixelIdxList)

Один пример:

[x,y]=ind2sub(size(Im), 834)

x =

    24

y =

    28
person Cape Code    schedule 16.05.2014
comment
Я получаю сообщение об ошибке. Неопределенная функция «минус» для входных аргументов типа «ячейка». Ошибка в ind2sub (строка 35) vi = rem(ndx-1, siz(1)) + 1; - person Mojo Jojo; 14.03.2016
comment
@MojoJojo Я предполагаю, что ndx - это PixelIdxList из моего ответа? Тогда это массив ячеек, и вы не можете вычесть 1 из массива ячеек. Кроме того, что делает siz()? - person Cape Code; 14.03.2016