Как правило, в MATLAB можно много чего делать без циклов, используя вместо этого векторизация . Как обсуждалось в комментариях ниже вашего вопроса, в MATLAB включены функции фильтрации, такие как medfilt2
, wiener2
или imfilter
, которые все работают с двумерными изображениями напрямую, без каких-либо петель.
Чтобы восстановить только центральную часть вашего изображения, вы применяете фильтр ко всему изображению, сохраняете результат во временной переменной, а затем копируете нужную часть в ваше искаженное изображение:
tmpimage = medfilt2(distortedimage);
finalimage = distortedimage;
finalimage(57:456,57:456)=tmpimage(57:456,57:456);
Конечно, если вы не заботитесь о краевых эффектах во время реконструкции, вы можете просто вызвать реконструкцию для той части, которая вас интересует, и избежать tmpimage
:
finalimage = distortedimage;
finalimage(57:456,57:456)=medfilt2(distortedimage(57:456,57:456));
Обратите внимание, что размеры в назначении должны совпадать: вы не можете назначить finalimage(57:456,57:456)=medfilt2(distortedimage)
, так как правый размер создает матрицу 512 на 512, которая не вписывается в центр 400 на 400 финального изображения.