这是正常图像
这是运动模糊图像
模糊图像频谱图中心化
直方均衡化
二值化
相邻暗条纹搜寻示意图
形态学开运算
canny算子边缘检测
1°~ 180°Radon变换估算出运动模糊角度
将频谱图像按估算出的角度 θ 顺时针旋转后作垂直投影
直方图均衡化
垂直投影
估算模糊长度
构造PSF,然后通过基于露西-理查德森(Richardson-Lucy) 盲去卷积算法复原模糊图像
复原图像
clc;
clear;
close all;
I=imread('lj3.BMP');
I=rgb2gray(I);
figure;
imshow(I);
%% 手动运动模糊
len=40; %20<=len<=80
theta=40; %0<theta<=160°
PSF=fspecial('motion',len,theta);
I=imfilter(I,PSF,'circular','conv');
figure;
imshow(I);
%% 归一化
I1=GuiYihua(I);
figure;
imshow(I1,[]);
%% 直方均衡化
I2=uint8(I1);
I2=histeq(I2);
figure;
imshow(I2);
%% 二值化
I3 = imbinarize(I2);%二值化
figure;
imshow(I3);
%% 形态学开运算
se = strel('disk',20);
obj1 = imopen(I3,se);
figure;
imshow(obj1);
%% 条纹边缘
L = edge(obj1,'Canny');%边缘检测
figure;
imshow(L)
%%
theta = 1:180;
R = radon(L,theta);
% figure
% imshow(R);
MAX = max(max(R));
[m,n] = find(R == MAX);
[M,N] = size(I3);
beita = atan(tan(n*pi/180)*M/N)*180/pi;
if beita<0
beita=beita+180;
end
%%
I4=imrotate(I,-beita,'bicubic','loose');
I4=GuiYihua(I4);
figure;
imshow(I4,[]);
%%
I4=uint8(I4);
I4=histeq(I4);
figure;
imshow(I4);
R=sum(I4);
R=smooth(R);
figure;
plot(R);
%这个d=81是看那个垂直投影图手动算出来的哈
d=81;
[m1,n1]=size(I4);
[x1,i1]=max(R);
X=1:size(R,1);
max1=imregionalmax(R);
min2=imregionalmin(R);
P=max1|min2;
Xp=X(P);
s=find(Xp==i1);
asd=((cos(beita))^2+(m1/n1)^2*(sin(beita))^2)^0.5;
L=n1/d*asd;
%% 盲区卷积复原
psf=fspecial('motion',L,beita);
res3=deconvblind(I,psf,30);
figure,imshow(res3)