Как найти центр тяжести разных частей изображения?

У меня есть изображение, которое я хочу разделить на три части, найти центр тяжести частей отдельно и отобразить их на исходном изображении. Я использовал blkproc для разделения изображения на сетки [1 3], но не могу отображать центроиды. Вот код, который я написал,

i=imread('F:\line3.jpg');

i2=rgb2gray(i);

bw=im2bw(i2);

imshow(bw)

fun=@(x) regionprops(x,'centroid');

b=blkproc(bw,[1 3],fun);

Но я не могу отобразить центроиды, а также получить их значения. Любая помощь будет высоко ценится.


person sayem2603    schedule 05.11.2013    source источник


Ответы (2)


Вы можете просто использовать команду plot для построения графика поверх изображения. Какими бы ни были координаты центроида [X,Y], скажем, cx(1:3) и cy(1:3) numCentroids — это количество центроидов, которые вы рисуете.


hold on;
for ii = 1:length(numCentroids)
    plot(cx(ii),cy(ii),'Marker','s','MarkerSize',10,'MarkerFaceColor','r','MarkerEdgeColor','k')
end

Если вы хотите написать более элегантный код, вы можете запустить команду plot один раз для всех ваших центроидов, а затем сделать тип стиля линии невидимым. Однако ответ, который я предоставил, должен работать.

Вот пример изображения с выдуманными центроидами.

введите здесь описание изображения

person James Edward West III    schedule 05.11.2013

Настоятельная рекомендация - используйте blockproc вместо blkproc. Он лучше разработан и проще в использовании.

Теперь, во-первых, вторым входом для blockproc является размер блока, а не размер сетки. Итак, если вы хотите разделить изображение на сетку [1 3], которую я понимаю как одну строку из трех блоков, вам следует установить размер блока следующим образом:

 blocksize = [size(i,1) ceil(size(i,2)/3)];

Во-вторых, отключить параметр TrimBorder в blockproc. Код будет выглядеть примерно так:

 fun=@(x) regionprops(x,'centroid');
 blocksize = [size(i,1) ceil(size(i,2)/3)];
 b=blockproc(bw,blocksize,fun,'TrimBorder',false);

Одна небольшая вещь - я бы рекомендовал не использовать имя переменной «i». По умолчанию он представляет собой мнимое число i = sqrt(-1); в Матлаб.

person Tensored Plasma    schedule 06.11.2013