Matlab图像复原(运动模糊、散焦模糊)
圖像退化
圖像退化的因素各種各樣,但最主要的就是在得到圖像,傳送過程和保存的時候導致的,還有由于形成圖像系統的不同、想要拍的物體和相機之間的相對運動,一些空氣媒介等等都會讓圖像變得模糊不清楚、混入噪聲、照片對比度也有所降低等種種現象。當下,通常見到的退化圖像一般是運動的模糊類型、高斯噪聲的模糊類型和離焦的模糊類型,有時還有多種模糊混合在一塊的情況。而且因為噪聲一般都會存在于各種情況當中,因此模糊的圖像里面往往都存在噪聲的這一影響因素。
圖像退化的時候,有兩個因素會影響這一過程,其一就是退化的模糊函數,也就是所說的點擴散函數。其二是噪聲的這個因素,先是建立起一個數學表達式的模型,在這里面找到想要知道的一些先驗知識,最后把圖像進行還原,想要找到并確定先驗知識就是一個難點同時也是重點,對圖像噪聲的確定和模糊函數的確立最主要。點擴散函數想要得到確定那就得先知道圖像為什么退化,知道其原因和退化的過程,才能進一步了解其點擴散函數,進而對圖像的模糊函數展開估計,知道這些以后就能夠結合各種優秀算法對圖像進行還原了,把圖像退化的這個過程反向思考,逆轉過來達到原圖像的恢復。
圖像模糊類型識別
點擴散函數會隨著圖像模糊種類的不同而變化,想要把模糊參數更精確的找出來,那么把不同的圖像模糊類型進行分類處理,就可以根據不同的類型做出相應不同的處理辦法,不一樣的點擴散函數就直接求取不同的參數即可。比如,如果將運動模糊類型和散焦模糊類型的圖像分開來看的話,運動的這類圖像找到其運動模糊方向和運動模糊長度就可以了。其中對于模糊類型的判別,傅里葉變換是一個很重要的依據。
不同類型圖像的傅里葉變換頻域圖像:
同樣還有散焦圖像:
模糊圖像的還原
運動模糊
還原效果圖:
還原前,觀察其頻域圖像:
發現它是水平方向上的運動模糊(其相間條紋是豎直的),故采用’motion‘掩模進行復原,運動模糊的LEN可以自己實驗得到:
clc;
clear;
close all;[img,map]=imread('2.bmp');
img=ind2gray(img,map);
figure,imshow(img),title('原圖');
psf=fspecial('motion',40,0);
res1=deconvblind(img,psf);
figure,imshow(res1),title('盲去卷積10次');
res2=deconvblind(img,psf,20);
figure,imshow(res2),title('盲去卷積20次');
res3=deconvblind(img,psf,30);
figure,imshow(res3),title('盲去卷積30次');
res4=deconvblind(img,psf,50);
figure,imshow(res3),title('盲去卷積50次');
散焦模糊
還原效果圖:
在復原前,觀察圖像頻域圖像:
故能判斷這是一個散焦圖像(頻域圖像中間是圓),故采用’disk‘掩模進行復原,模糊半徑可以自己實驗得到。
clc;
clear;
close all;[img,map]=imread('3.bmp');
img=ind2gray(img,map);
figure,imshow(img),title('原圖');
psf=fspecial('disk',8);
res1=deconvblind(img,psf);
figure,imshow(res1),title('盲去卷積10次');
res2=deconvblind(img,psf,20);
figure,imshow(res2),title('盲去卷積20次');
res3=deconvblind(img,psf,30);
figure,imshow(res3),title('盲去卷積30次');
res4=deconvblind(img,psf,50);
figure,imshow(res3),title('盲去卷積50次');
總結
以上是生活随笔為你收集整理的Matlab图像复原(运动模糊、散焦模糊)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现大数运算(长整数的加、减、乘、
- 下一篇: C语言调用easyX图形库画圆盘时钟