2011-04-30 51 views
0

所以,我有一個512x512失真的圖像,但我想要做的是恢復圖像中心位置的一個400x400的部分,而它仍然在它之外失真。我如何去執行這樣的事情?MATLAB - 恢復圖像的中央子部分

我想有一個for循環中的for循環像

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

但我不太清楚下一步該怎麼做......

+0

你試圖恢復什麼樣的失真?如果你打算將過濾器應用到圖像的那一部分,你可以做一些事情:'image(57:457,57:457)= imfilter(image(57:457,57:457),filter); ' – Pablo 2011-04-30 04:37:32

+0

失真是在先前的設置中隨機應用於圖像的一些噪聲。我現在想要做的是撤銷過程,儘可能地將圖像恢復到原始狀態,但我不確定哪個過程最有效,以及如何。 'medfilt2'功能似乎工作得很好,但我也試圖探索其他可能更有效的選項。 – user730255 2011-04-30 06:15:04

+0

你有沒有試過維納過濾? http://www.mathworks.com/help/toolbox/images/ref/deconvwnr.html – Pablo 2011-04-30 06:29:37

回答

1

作爲一般規則,你可以做MATLAB中沒有使用vectorization代替循環的很多東西。正如您的問題下面的評論中所討論的那樣,MATLAB中包含的濾波函數如medfilt2,wiener2imfilter,它們都可以直接在二維圖像上工作,而不需要任何循環。

只還原圖像的中心部分,應用過濾器的完整圖像,結果存儲在一個臨時變量,然後在部分複製要到你distored圖片:

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)); 

注意在分配中的大小如何需要匹配:你不能由於右手大小產生了一個512×512的矩陣,它不適合最終圖像的400×400中心,因此請輸入finalimage(57:456,57:456)=medfilt2(distortedimage)