У меня есть изображение и пиксель нескольких крупных объектов в этом изображении, определенных с помощью regionprops. Теперь я хочу создать новое изображение, которое содержит только один объект, размер которого изменяется до размера объекта. Так что я делаюМатрица Matlab как индекс для матрицы
rawimage = imread('testfile.tif');
processimage = squeeze((sum(rawimage,3))');
IMAGE_labeled = bwlabel(processimage,8);
shapedata=regionprops (IMAGE_labeled,'Area','PixelList');
index = find ([shapedata.Area]>5000);
for i = 1:length(index)
ix = shapedata(index(i)).PixelList(:,1);
iy = shapedata(index(i)).PixelList(:,2);
newimage = zeros(max(ix)-min(ix)+1,max(iy)-min(iy)+1,3);
for im = 1:length(ix)
newimage(ix(im)-min(ix)+1,iy(im)-min(iy)+1,:) = rawimage(ix(im),iy(im),:);
end
newimage = uint8(newimage);
imwrite(newimage,'myimage.tif','tif')
end
Кто-нибудь идея, как я могу векторизации второй цикл, чтобы ускорить весь код вверх? В конечном итоге возникает вопрос, как использовать два вектора в качестве индекса в матрице.
Я нашел
Vc = num2cell([ix,iy])
rawimage(sub2ind(size(rawimage),Vc{i,:}))
, но это опять-таки требует цикл, чтобы пройти через все индексы Vc, как я не могу использовать
rawimage(sub2ind(size(rawimage),Vc))
Спасибо за ваши предложения
Thx thats быстрее. Проблема в том, что некоторые объекты перекрываются, если я использую поле. Таким образом, часть одного объекта будет в новом изображении другого объекта ... – horseshoe
@horseshoe Извините, я неправильно прочитал ваш код. Я обновлю. – Suever
@ Авторское обновление. – Suever