Я пытаюсь применить к изображениям обычную обработку изображений: Мой цикл for выполняет именно то, что я хочу: он позволяет мне находить пиксели с наибольшей интенсивностью, а также запоминать координаты. этого пикселя. Однако код ломается всякий раз, когда встречается кратное rows
& ndash; что в данном случае равно 18.
Например, длина этого изображения (rows * columns
из image
) составляет 414. Таким образом, существует 414/18 = 23 случая, когда программа завершается с ошибкой (то есть количество столбцов).
Возможно, есть лучший способ достичь моей цели, но это единственный способ, которым я мог бы подумать о сортировке изображения по интенсивности пикселей, а также зная координаты каждого пикселя. Рад принять предложения альтернативного кода, но было бы замечательно, если бы кто-то имел представление о том, как обрабатывать случаи, когда mod(x,18) = 0
(т. Е. Когда индекс вектора делится на общее количество строк).
image = imread('test.tif'); % feed program an image
image_vector = image(:); % vectorize image
[sortMax,sortIndex] = sort(image_vector, 'descend'); % sort vector so
%that highest intensity pixels are at top
max_sort = [];
[rows,cols] = size(image);
for i=1:length(image_vector)
x = mod(sortIndex(i,1),rows); % retrieve original coordinates
% of pixels from matrix "image"
y = floor(sortIndex(i,1)/rows) +1;
if image(x,y) > 0.5 * max % filter out background noise
max_sort(i,:) = [x,y];
else
continue
end
end