
基于matlab运动模糊图像处理的源代码 100
img2=deconvlucy(img,PSF,n); %用lucy-richardson方法复原图像,其中img是运动模糊图像,PSF是扩散子,n是迭代次数,img2是复原图像
我是要把模糊的图像变清楚,不是把清楚的图像用PSF变模糊再用lucy-richardson
变清楚。现在就是这幅图的模糊长度和模糊角度不知道,这是我的毕业设计题目,不可能这么简单,我已经做十多天了,试过很多方法,我需要从头到尾完整的源代码,就是copy后放在matlab软件上能立即出结果的程序
我是要把模糊的图像变清楚,不是把清楚的图像用PSF变模糊再用lucy-richardson变清楚。现在就是这幅图的模糊长度和模糊角度不知道,这是我的毕业设计题目,不可能这么简单,我已经做十多天了,试过很多方法,我需要从头到尾完整的源代码,就是copy后放在matlab软件上能立即出结果的程序
%% 读入并显示图像
filename = '112.jpg';
I = imread(filename);
% figure
% imshow(uint8(I));
% title('原图');
%% 生成运动模糊图像
PSF = fspecial('motion',20,10);
g = imfilter(I, PSF, 'circular');
% figure
% imshow(uint8(g));
% title('运动模糊图');
%% 对运动模糊图像进行灰度化,并进行二维快速傅里叶变换,生成其频谱图
gb = rgb2gray(g);
I=im2double(gb);
F=fft2(I);
F=fftshift(F);
imshow(F);
F=abs(F);
t=log(F+1);
figure;
imshow(t,[]);
%% 用canny算子将压缩居中后的频谱图进行边缘检测,二值化
T = graythresh(t);
bw=edge(t, 'canny', T);
imshow(bw);
title('边缘检测后的图');
%% 对二值化后的频谱图进行radon变换
theta = 1:180;
[R,xp]= radon(bw, theta);
%% 计算出通过radon变换求出的模糊角度
MAX = max(max(R));
[m, n] = find(R == MAX);
[M,N] = size(F);
beita =atan(tan(n*pi/180)*M/N)*180/pi; %beita为模糊方向