MATLAB - восстановить центральную часть изображения - PullRequest
0 голосов
/ 30 апреля 2011

Итак, у меня искаженное изображение 512x512, но я пытаюсь восстановить только центральное подразделение изображения 400x400, пока оно все еще искажено за его пределами.Как мне реализовать что-то подобное?

Я думал создать цикл for внутри цикла for, например

for row = 57:457
    for col = 57:457
        %some filter in here
    end
end

Но я не совсем уверен, что делать дальше...

1 Ответ

1 голос
/ 06 июня 2011

Как правило, в 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 финального изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...