Я написал некоторый код в MATLAB, который преобразует изображение (звезд) в двоичное изображение с использованием заданного порога, а затем помечает каждый кластер пикселей (звезд), превышающий этот порог. Маркировка производит вывод: например.
[1 1 1 0 0 0 0 0 0
1 1 0 0 0 2 2 2 0
0 0 0 3 3 0 2 0 0
0 0 0 3 3 0 0 0 0]
Таким образом, каждый кластер из 1, 2, 3 и т. д. представляет собой звезду. Я использовал ответ, предоставленный по этой ссылке: Как найти все связанные компоненты в бинарном изображении в Matlab? чтобы пометить пиксели. После этого код находит площадь и центроиды каждого кластера пикселей.
Теперь я хочу включить некоторый код, который будет автоматически рисовать прямоугольники определенной площади пикселя с центром в каждом центроиде. Например, центроид имеет местоположение [41, 290], а кластер пикселей имеет площадь 6 пикселей, я хочу нарисовать блок площадью nx 6 пикселей с центром блока [41, 290]. . И мне нужно это, чтобы перебрать каждый центроид и сделать то же самое.
Как мне это сделать?
Центроид и код области показаны ниже.
%% Calculate centroids of each labelled pixel cluster within binary image
N = max(B(:)); % total number of pixel labels generated in output array B
sum_v = zeros(N,1); % create N x 1 array of 0's
sum_iv = zeros(N,1); % "
sum_jv = zeros(N,1); % "
for jj=1:size(B,2) % search through y positions
for ii=1:size(B,1) % search through x positions
index = B(ii,jj);
if index>0
sum_v(index) = sum_v(index) + 1;
sum_iv(index) = sum_iv(index) + ii;
sum_jv(index) = sum_jv(index) + jj;
end
end
end
centroids = [sum_jv, sum_iv] ./ sum_v % calculates centroids for each cluster
for pp = 1:N
id_index = find(B == pp);
pixels = numel(id_index); % counts number of pixels in each cluster
area(pp) = pixels; % area = no. of pixels per cluster
end
hold on
for i=1:size(centroids,1)
plot(centroids(i,1),centroids(i,2),'rx','MarkerSize',10)
end
hold off
'ID_counter' undefined near line 24 column 12
. Должно быть простоN
? - person HansHirse   schedule 10.05.2019