作爲一般規則,你可以做MATLAB中沒有使用vectorization代替循環的很多東西。正如您的問題下面的評論中所討論的那樣,MATLAB中包含的濾波函數如medfilt2
,wiener2
或imfilter
,它們都可以直接在二維圖像上工作,而不需要任何循環。
只還原圖像的中心部分,應用過濾器的完整圖像,結果存儲在一個臨時變量,然後在部分複製要到你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)
。
你試圖恢復什麼樣的失真?如果你打算將過濾器應用到圖像的那一部分,你可以做一些事情:'image(57:457,57:457)= imfilter(image(57:457,57:457),filter); ' – Pablo 2011-04-30 04:37:32
失真是在先前的設置中隨機應用於圖像的一些噪聲。我現在想要做的是撤銷過程,儘可能地將圖像恢復到原始狀態,但我不確定哪個過程最有效,以及如何。 'medfilt2'功能似乎工作得很好,但我也試圖探索其他可能更有效的選項。 – user730255 2011-04-30 06:15:04
你有沒有試過維納過濾? http://www.mathworks.com/help/toolbox/images/ref/deconvwnr.html – Pablo 2011-04-30 06:29:37