当前位置: 首页 > article >正文

基于MATLAB的运动模糊图像处理

研究目的

在交通系统、刑事取证中图像的关键信息至关重要,但是在交通、公安、银行、医学、工业监视、军事侦察和日常生活中常常由于摄像设备的光学系统的失真、调焦不准或相对运动等造成图像的模糊,使得信息的提取变得困难。但是相对于散焦模糊,运动模糊图像的复原在日常生活中更为普遍,比如高速运动的违规车辆的车牌辨识,快速运动的人群中识别出嫌疑人、公安刑事影像资料中提取证明或进行技术鉴定等等,这些日常生活中的重要应用都需要通过运动模糊图像复原技术来尽可能地去除失真,恢复图像的原来面目。因此对于运动模糊图像的复原技术研究更具有重要的现实意义。

图像复原原理

本文探讨了在无噪声的情况下任意方向的匀速直线运动模糊图像的复原问题,并在此基础上讨论了复原过程中对点扩散函数(PSF)的参数估计从而依据自动鉴别出的模糊方向和长度构造出最为近似的点扩散函数,构造相应的复原模型,实现运动模糊图像的复原;在模糊图像自动复原的基础上,根据恢复效果图的纹理特征和自动鉴别出的模糊长度和角度,人工调整模糊方向和长度参数,使得复原效果达到最佳。

实验过程

模糊方向的估计:

对图1(a)所示的原始图像‘车牌’图像做方向

,长度L=20像素的匀速直线运动模糊,得到退化图像如图1(b)

  

            1(a)                            1(b)

j=imread('车牌1.jpg');   

figure(1),imshow(j);  

 title('原图像');

len=20; theta=30;

psf=fspecial('motion',len,theta);

j1=imfilter(j,psf,'circular','conv');

figure,imshow(j1);

title('PSF模糊图像');

图1(c)和1(d)分别为原图像和模糊图像的二次傅里叶变化

    

            1(c)                            1(d)

J=rgb2gray(j);

K=fft2(J);%傅里叶变换  

M=fftshift(K);%直流分量移到频谱中心

N=abs(M);%计算频谱幅值

P=(N-min(min(N)))

/(max(max(N))-min(min(N)))*225;%归一化

figure,imshow(P);

title('傅里叶变换频谱');

J1=rgb2gray(j1);

K1=fft2(J1);%傅里叶变换  

M1=fftshift(K1);%直流分量移到频谱中心

N1=abs(M1);%计算频谱幅值

P1=(N1-min(min(N1)))/(max(max(N1))

-min(min(N1)))*225;%归一化

figure,imshow(P1);

title('傅里叶变换频谱');

利用图1(d)粗略的计算模糊的方向,可以通过matlab自带的画线工具,选取如下图1(e)所示的三角形,计算a与c之间的夹角

Matlab命令窗口输:ginput

选中三个顶角后回车,可得数据

ans =

  136.6009  146.3977

  137.4205  166.8895

  145.2074  166.8895

粗略取值后,经Matlab计算得:

 atan(20/9)*180/pi

ans =  65.7723  则运动方向为90-ans≈25(误差为5)。

1(e)      

模糊长度的估计

运动模糊图像中,在运动方向上大多数模糊图像的背景像素点具有很强的相关性,即沿着运动模糊的轨迹,背景像素点的灰度值逐渐变化或者不变。通过文献的学习,先对模糊图像进行一阶微分,然后进行自相关运算,可得一条鉴别曲线,曲线上会出现对称的相关峰,峰值为负,两相关峰之间的距离等于运动模糊长度。

把模糊图像转换为灰度图像,采用Sobel算子对其进行一阶微分运算,Sobel算子

         

其自相关曲线如图2(a)所示。利用matlab的Data Cursor可以测得两负峰之间的距离为20个像素点,此为运动模糊的长度,与理论值吻合(比较精确)。由于长度的测量计较精确,可以根据长度对运动模糊方向进行不同的取值,达到最好效果。

f1=rgb2gray(j1);  

f1=im2double(f1);

h = fspecial('Sobel');   %Sobel算子

J = conv2(f1,h,'same');  %Sobel算子微分

IP=abs(fft2(J));

%图像能量谱密度

S=fftshift(real(ifft2(IP)));

figure,plot(S);

title('自相关图');

%图像自相关函数

图像的复原

然后我们按本文中鉴别出的运动模糊图像的运动长度和运动角度后,构造出相应的匀速直线运动PSF,并对其进行图像复原,得到的效果如下图3所示。

             

 

len=20;

theta=25;

psf=fspecial('motion',len,theta);

wnr1=deconvwnr(j1,psf,0);

subplot(221),imshow(wnr1);

title('维纳滤波处理后图像');

np=0.002*prod(size(j));

er=deconvreg(j1,psf,np/3.0);

subplot(222),imshow(er);

title('最小二乘方复原')

            

lucy=deconvlucy(j1,psf);

subplot(223),imshow(lucy);

title(' Lucy richardson图像复原');

NITPSF=ones(size(psf));

[mang,psf]=deconvblind(j1,INITPSF,40);

subplot(224),imshow(mang);

title('盲去卷积复原');

由上图可知经过Lucy richardson复原的图像效果最好,可多次修改运动模糊方向,再进行Lucy richardson复原。下图4为运动模糊方向为30的效果。

   

图像中可以比较清楚的看出此图中汽车的牌子‘本田’以及车牌‘闽C 6R972’。


http://www.kler.cn/news/314230.html

相关文章:

  • LVGL学习
  • ES6 -- 2015
  • 肺结节检测系统源码分享
  • CLion/Git版本控制
  • 使用Rust直接编译单个的Solidity合约
  • VCG 顶点区域生长
  • 成都睿明智科技有限公司电商服务引领品牌跃升
  • 群晖NAS使用Docker本地部署网页版Ubuntu系统并实现无公网IP远程访问
  • 人工智能之就业方向(The Employment Direction of Artificial Intelligence)
  • Python套接字
  • 淘宝扭蛋机小程序,扭蛋机文化下的新体验
  • Flutter 踩坑记录分享(持续更新)
  • mockito+junit搞定单元测试(2h)
  • 前端JavaScript导出excel,并用excel分析数据,使用SheetJS导出excel
  • C++ 笔试常用算法模板
  • 在 Qt 中使用 QLabel 设置 GIF 动态背景
  • 【后端开发】JavaEE初阶—线程的理解和编程实现
  • C#用SDK打开海康工业相机,callback取图Bitmap格式,并保存
  • 如何使用ssm实现基于Web的数字家庭网站设计与实现+vue
  • Netty+HTML5+Canvas 网络画画板实时在线画画
  • 嵌入式 开发技巧和经验分享
  • 电脑ip地址怎么换地区:操作步骤与利弊分析
  • Elasticsearch如何排序,分页以及高亮查询
  • Rust GUI框架 tauri V2 项目创建
  • 如何安装部署kafka
  • JAVA自助高效安全无人台球茶室棋牌室系统小程序源码
  • 篮球运动场景物体检测系统源码分享
  • 解决在Nignx下Thinkphp路由不生效问题
  • 音视频入门基础:AAC专题(7)——FFmpeg源码中计算AAC裸流每个packet的size值的实现
  • 计算机网络(八) —— Udp协议