Как упомянуто @ Крис , строка
corners(1:length(y),:,i) = [y x];
это проблема. Простой способ убедиться, что углы срезаются, - использовать массив ячеек
max_pts = 900;
cornerCell = cell(size(images,3),1);
parfor i = 1:size(images,3)
I = images(:,:,i);
[y x] = get_corners(I,max_pts);
cornerCell{i} = [y x];
end
Если вы не хотите, чтобы углы были массивом ячеек (обратите внимание, что для построения углов для i-го изображения вы можете вызвать imshow(images(:,:,i),[]),hold on, plot(cornerCell{i}(:,1),cornerCell{i}(:,2),'o')
), вы всегда можете преобразовать обратно в исходный формат 900 на 2 на 2 Массив nImages в цикле, который не будет стоить вам заметного времени:
corners = zeros(max_pts,2,size(images,3));
for i=1:size(images,3)
corners(1:size(cornerCell{i},1),:,i) = cornerCell{i};
end