1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
随着信息处理技术和视觉通信技术的高速发展,人们获取的知识量爆炸式增长,因此迫切的要求完善的信息处理技术为人们提供更加方便、快捷服务。数字图像及及其相关技术是信息处理技术的重要内容之一,对于数字图像一般要求是高分辨图像,如:医学图像要求能够显示出那些人眼不能辨别出的细微病灶;卫星地面要求卫星图像至少能够辨别出人的脸相甚至是证件;有些检测识别控制装置需要足够高分辨率的图像才能保证测量和控制的精度,因此提高图像分辨率是图像获取领域里追求的一个目标。
1970年以来,CCD和CMOS图像传感器广泛的被用来获取数字图像,若要获取高分辨图像,最直接的方法就是提高成像装置的分辨力,由于受传感器阵列排列密度的限制,提高传感器的空间分辨率越来越难,也会大幅度的增加数字摄像机的价格。另外,像运动模糊、系统的点扩散函数模糊等不能够通过改善成像装置硬件的分辨力来解决,所以,图像的超分辨率重构技术的研究有重大的意义,不需要昂贵的图像获取设备,只需要通过计算机软件的处理就能获得高分辨率的图像。
超分辨率图像重建是指从一序列具有互补信息的低分辨率图像来重建一幅高分辨率的清晰图像的复原技术,同时还能够消除加性噪声以及由有限检测器尺寸和光学元件产生的模糊。超分辨率图像重建的目的在于复原截止频率之外的信息,以使图像获得更多的细节和信息。
图像超分辨率重建技术通常可以分为单帧和多帧图像重建方法。单帧图像重建也称图像放大,最早由Harris和Goodman于60年代提出,其思想主要是通过对低分辨率图像静态插值的方法来实现图像分辨率的提高。因为单个图像的利用不能去除由低分辨率图像取样时所具有的混淆和模糊,随后有许多人研究提出了其他复原方法,如线性外推法。80年代末之后,人们在超分辨率图像复原方法研究上取得了突破性的进展。Hunt等人提出和发展了许多有实用价值的方法,如能量连续降减法、贝叶斯分析法;Tsai和Huang提出了在频域中从互有位移的低分辨率图像序列中插值产生一帧高分辨率图像的概念,才从本质上解决了图像超分辨率无唯一解的问题;在此基础上,Kim等人研究了混入噪声和图像有模糊退化情形下的模型,并给出了加权迭代和正则化迭代两种解混叠方法;Bose等人则给出了一种解混叠的总体最小二乘方法;进一步发展中,人们在统计先验知识的使用上也采用了新的方法,如Cheeseman等人使用了基于高斯平滑先验知识的估计器来增强卫星遥感图像,此外,Schultz和Stevenson,Tekalp等人,Keren和Pelegd等人以及Elad和Feuer研究了改善数字图像空间分辨率的空域方法。
在凸集投影方法中定义约束集合(constraint sets)为限制SR重构的一种灵活解空间。约束(constraints)被定义为表示包含所有可能SR重构空间的凸集,而集合(sets)表示可行的解特征,如:非负性,能量绑定等,因此SR重构问题的解空间即为这些凸集约束的交集。凸集投影(POCS)是指给定空间矢量的任一点,定位到满足所有凸集约束的一点的迭代过程。在超分辨率图像重建中, 首先要建立一个联系原始高分辨率图像和低分辨率观测序列的图像获取模型, 一般的图像获取模型可示为:
由上面叙述可知双线性插值会导致重建图像的边缘模糊,设计中采用梯度插值法,能够很好的保持图像的边缘信息。
(2)边缘振荡效应的抑制
POCS算法重建容易产生边缘振荡效应,边缘振荡是指在重建后的图像边缘处,颜色深的一侧像素颜色变得较浅,而颜色浅的一侧像素颜色变得较深,不能保持原始图像的光滑边缘,呈现出振荡的特性[11]。解决问题的途径就是改变边缘处像素的PSF函数,减小其作用的范围,所以采用Sobel [4] [8]算子来检测高分辨率参考帧的边缘,然后对边缘处的像素使用修正的PSF函数。
(3)噪声的减少
高分辨率图像在经过图像的运动估计和 POCS 重建后会出现干扰噪声,这是由于当前帧中的部分像素没有出现在参考帧中,而这部分像素也参与了 POCS 超分辨率重建的过程,则出现一些干扰噪声[10]。在用块匹配算法采用一种设置运动向量可信度区间的方法来减少噪声的出现,MAD 的大小间接反映出匹配的准确度,可以对每一个子块的均值误差 MAD 进行排序,并且设置区间,假设估计的准确的运动向量所占的比列为 99%,可认为 MAD 值从小到大排序后的前 99%的对应的运动向量是准确的,即可设置区间为[0, 0.99],对在置信区间内的子块对应的运动向量,参与图像的重建,而不在置信区间内的子块对应的运动向量,则不参与重建。
由前面的分析可知,图像重建实际的操作过程如下,为了更加清洗和详细地表示该过程,这里用伪代码来表示:
Step1: 确定图像序列 LR 中的一帧作为参考帧,并对其进行梯度插值,作为高分辨率图像的初始估计;
Step2: 对低分辨率图像序列(每帧图像)与参考帧做运动估计(图像配准),得到低分辨率图像相对于参考帧的偏移量,即运动向量场V(k ),并计算运动向量可信度。
Step3: For i = 1 to q % q 为迭代次数
For k = 1to p % p 为 LR 帧的个数, 对每一帧进行计算
For m = 1to M % M 为 LR 帧的行数
For n = 1to N % N 为 LR 帧的列数
3.1 判断像素的运动向量可信度是否在置信区间内,是则继续,
根据运动向量场V ( k),计算该像素在估计的 HR 图像位置;
3.2 若该像素为 Sobel 检测到的边缘,修改 PSF;
3.3 计算 PSF 作用范围内的像素;
3.4 模拟采样过程,获得模拟低分辨率像素估计值;
3.5计算实际图像像素值与像素估计值之间的残差;
3.6根据残差修正估计高分辨率图像的像素值;
3.7对修正的高分辨率像素值执行幅值约束;
Step4:迭代终止,得到最终的高分辨率图像估。
3.MATLAB核心程序
%POCS %POCS %POCS %POCS if sel == 2 %降低图像的分辨率 for j = 1:Numbers+1 pixel_low_tmp = func_lowfbl(pixel(:,:,j),Fenbl_sample); pixel_low(:,:,j) = pixel_low_tmp; end addpath(genpath('b')); figure; %原POCS算法 for j = 1:K_frame Image_tmp = func_pocs_classic(j,pixel_low,min(30,Numbers)+j+1,Fenbl_sample); Image_pocs(:,:,j) = Image_tmp; [psnrs,mses] = func_PSNR(pixel(:,:,j),Image_pocs(:,:,j)); PSNR_pocs(j) = psnrs; MSE_pocsr(j) = mses; end subplot(121);imshow(Image_pocs(:,:,1),[]);title('通过原POCS算法得到的重构图'); clear Image_pocs %改进后的POCS算法 for j = 1:K_frame Image_tmp = func_pocs(j,pixel_low,min(30,Numbers)+j+1,Fenbl_sample); Image_pocs2(:,:,j) = Image_tmp; [psnrs,mses] = func_PSNR(pixel(:,:,j),Image_pocs2(:,:,j)); PSNR_pocs2(j) = psnrs; MSE_pocsr2(j) = mses; end subplot(122);imshow(Image_pocs2(:,:,1),[]);title('通过改进后的POCS算法得到的重构图'); clear Image_pocs2 figure; plot(PSNR_pocs,'r-o');hold on; plot(PSNR_pocs2,'b-o');hold on; grid on; legend('通过POCS算法得到的重构图','通过改进POCS算法得到的重构图'); title('PSNR'); save result\dz.mat PSNR_pocs PSNR_pocs2 end
标签:Image,POCS,像素,空域,matlab,图像,分辨率,重建 From: https://www.cnblogs.com/51matlab/p/17378722.html