基于Matlab运动模糊图像复原

这是正常图像 

 这是运动模糊图像

模糊图像频谱图中心化 

直方均衡化 

 二值化

 相邻暗条纹搜寻示意图

 形态学开运算

 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(&apos;motion&apos;,len,theta);
I=imfilter(I,PSF,&apos;circular&apos;,&apos;conv&apos;);
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(&apos;disk&apos;,20); 
obj1 = imopen(I3,se);
figure;
imshow(obj1);
%% 条纹边缘
L = edge(obj1,&apos;Canny&apos;);%边缘检测
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,&apos;bicubic&apos;,&apos;loose&apos;);
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(&apos;motion&apos;,L,beita);
res3=deconvblind(I,psf,30);
figure,imshow(res3)

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值