盲去卷积 图像复原 matlab源码解释

freeboy1015 2012-07-12 04:43:23
下面是一个人写的盲去卷积算法实现图像去模糊,其中有些代码不是很能理解,求解释!尤其每次都做这个循环:
for i=1:x_size %进行乘(-1)^(i+j)处理
for j=1:y_size
flag=(-1)^(i+j);
tmp1(i,j)=tmp1(i,j)*flag;
end
end
到底是干嘛?最好能对整段代码加些注释再贴到回复里面。谢谢!


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%程序内容:盲迭代反卷积方法恢复图象
%%编程时间:2007年12月16日
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
gray_S=imread('cameraman.jpg'); %读入图像
figure;imshow(gray_S);title('original image') %显示原始图
[x_size,y_size]=size(gray_S);

%求取PSF尺寸大小(圆形)
p_size=5; %定义psf尺寸大小
p_support=zeros(x_size,y_size); %psf掩模
p_support(1:p_size,1:p_size)=1;
beta=0.9; %参数设置
g=im2double(gray_S); %转换为double型

tmp1=g;
flag=1;
for i=1:x_size %进行乘(-1)^(i+j)处理
for j=1:y_size
flag=(-1)^(i+j);
tmp1(i,j)=tmp1(i,j)*flag;
end
end

G=fft2(tmp1);
F0=fft2(tmp1);
F1=zeros(x_size,y_size);

%-----------------------------循环迭代
for k=1:40 %确定迭代次数
H=G./F0; %确定H,并且把小于0的部分置为0
h=ifft2(H);
tmp1=h;
for i=1:x_size
for j=1:y_size
flag=(-1)^(i+j);
tmp1(i,j)=tmp1(i,j)*flag;
end
end
tmp2=real(tmp1); %取实部
tmp3=find(tmp2<0);
tmp2(tmp3(:))=0; %将小于0的部分置0

h=tmp2.*p_support; %使用掩模,只留下中间圆的PSF部分
tmp1=h;
for i=1:x_size %进行乘(-1)^(i+j)处理
for j=1:y_size
flag=(-1)^(i+j);
tmp1(i,j)=tmp1(i,j)*flag;
end
end
H=fft2(tmp1);

%加上傅立叶条件限制
a1=find(abs(H(:))>=abs(G(:)));
a2=find(abs(H(:))<abs(G(:)));
F1(a1(:))=(1-beta)*F0(a1(:))+beta*(G(a1(:))./H(a1(:)));
F1(a2(:))=((1-beta)*F0(a2(:)).^(-1)+beta*H(a2(:))./G(a2(:))).^(-1);

f1=ifft2(F1); %把图像空域小于0的部分置0
tmp1=f1;
for i=1:x_size %进行乘(-1)^(i+j)处理
for j=1:y_size
flag=(-1)^(i+j);
tmp1(i,j)=tmp1(i,j)*flag;
end
end
tmp2=real(tmp1);
tmp3=find(tmp2<0);
tmp2(tmp3(:))=0;
f1=tmp2;

tmp1=f1;
for i=1:x_size %进行乘(-1)^(i+j)处理
for j=1:y_size
flag=(-1)^(i+j);
tmp1(i,j)=tmp1(i,j)*flag;
end
end
F0=fft2(tmp1);
end
figure;imshow(uint8(real(f1)*255/max(f1(:))));title('result image') %显示结果图
imwrite(uint8(real(f1)*255/max(f1(:))),'best.bmp');
%mesh(h(1:p_size,1:p_size))
...全文
649 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
renyongth 2012-12-05
  • 打赏
  • 举报
回复
(f*(-1)^(i+j))----FT----F(u-M/2,v-N/2) 把FT的原点变换到频域下的(M/2,N/2)了
Matlab7.x图像处理 ch2_1_1:查看直方图(§2.1.3) ch2_2_1:显示图像(§2.2.2) ch2_3_1:添加颜色条(§2.3.1) ch2_3_2:图像的单帧显示(§2.3.2) ch2_3_3:图像的多帧显示(§2.3.2) ch2_3_4:图像的动画显示(§2.3.2) ch2_3_5:灰度图像的动画显示(§2.3.2) ch2_3_6:纹理映射(§2.3.3) ch2_3_7:一个图形窗口中同时显示2幅图像(§2.3.4) ch3_1_1:嵌套使用图像代数函数(§3.1.1) ch3_1_2:两幅图像相加(§3.1.2) ch3_1_3:图像与常数相加(§3.1.2) ch3_1_4:两幅图像相减(§3.1.3) ch3_1_5:两幅图像相乘(§3.1.4) ch3_1_6:图像除以常数(两幅图像相除)(§3.1.5) ch3_2_1:图像缩放(§3.2.2) ch3_2_2:图像旋转(§3.2.3) ch3_2_3:图像剪切(§3.2.4) ch3_2_4:生成和应用仿射变换(§3.2.5) ch3_2_5:findbounds函数的应用(§3.2.5) ch3_2_6:makeresampler函数的应用(§3.2.5) ch3_2_7:投影变换(§3.2.5) ch3_3_1:计算图像的局部标准差(§3.3.1) ch3_3_2:计算输入图像的3×3邻域像素值的最大值(§3.3.2) ch3_4_1:根据指定的坐标选择一个六边形区域(§3.4.1) ch3_4_2:按灰度分割图像中的目标(§3.4.1) ch3_4_3:函数poly2mask的调用格式(§3.4.1) ch3_4_4:对指定区域进行锐化滤波(§3.4.2) ch3_4_5:填充指定的区域(§3.4.3) ch4_1_1:矩形连续函数的傅立叶变换(§4.1.1) ch4_1_2:构建一个矩形函数(§4.1.2) ch4_1_3:对f进行二维快速傅立叶变换(§4.1.2) ch4_1_4:对f进行补零(区域大小为256×256),而后进行二维快速傅立叶变换(§4.1.2) ch4_1_5:使变换结果的零频率分量位于中心,调用函数fftshift(§4.1.2) ch4_1_6:利用函数ifft2对乘积进行傅立叶反变换(§4.1.3) ch4_1_7:得到在图像text.png中对应字母“a”的定位结果(§4.1.3) ch4_2_1:对一幅图像进行离散余弦变换(§4.2.1) ch4_2_2:JPEG图像压缩(§4.2.2) ch4_3_1:正方形图像在0°和45°方向上的Radon变换(§4.3.1) ch4_3_2:计算方形图像从0°到180°每隔1°计算一次Radon变换的命令(§4.3.1) ch4_3_3:直线检测(§4.3.1) ch4_3_4:利用radon函数和iradon函数构造一个简单图像的投影并重建图像(§4.3.2) ch4_4_1:映射和重建图像(§4.4.1) ch5_1_1: 图像灰度线性变换 (§5.1.1) ch5_1_2: 图像灰度分段线性变换 (§ 5.1.1) ch5_1_3: 采用对数形式的变换函数进行动态范围压缩 (§5.1.1) ch5_1_4: 图像直方图的均衡化 (§5.1.2) ch5_1_5: 直方图规定化 (§5.1.2) ch5_2_1: 邻域平均的线性平滑滤波法实现降噪 (§5.2.2) ch5_2_2: winner滤波法实现降噪 (§5.2.2) ch5_2_3: 中值滤波实现降噪 (§5.2.2) ch5_2_4: 线性锐化滤波 (§5.2.3) ch5_2_5: 非线性锐滤波 (§5.2.3) ch5_3_1: Buterworth低通滤波器 (§5.3.1) ch5_3_2: Buterworth高通滤波器 (§5.3.2) ch5_4_1: 灰度分层法彩色图像的实现 (§5.4.2) ch5_4_2: 空间域灰度级-彩色变换的方法,进行图像增强 (§5.4.2) ch5_4_3: 均值滤波器对真彩图像的每一个颜色平面进行滤波 (§5.4.3) ch5_5_1: 噪声图像的生成 (§5.5.4) ch5_5_2: 目标图像的生成 (§5.5.4) ch6: 哈夫曼编码 (§6.1.4) ch7_1_1: 最大方差法计算灰度分割门限 (§7.1.2) ch7_1_2: 各种边缘检测算子 (§7.2.2) ch7_2_1.: hough 变换实现直线检测 (§7.2.3) ch7_2_2.: 相位编组 (§7.2.3) ch8_3_1:得到模糊图像(§8.3.2) ch8_3_2:原始图像中添加噪声(§8.3.2) ch8_4_1:生成模糊化实验图像(§8.4.1) ch8_4_2:维纳滤波复原(§8.4.2) ch8_4_3:约束最小二乘滤波复原(§8.4.3) ch8_4_4:Lucy-Richardson滤波复原(§8.4.4) ch8_4_5:盲卷积滤波复原(§8.4.5) ch9_2_1:调用函数bwmorph实现骨架化操作(§9.2.4) ch9_2_2:利用函数bwperim实现提取边界操作(§9.2.4) ch9_2_3:利用函数bwmorph实现提取边界操作和骨架化操作(§9.2.4) ch9_2_4:利用函数imbothat处理图像(§9.2.4) ch9_2_5:利用函数imclose执行图像闭运算(§9.2.4) ch9_2_6:利用函数imopen执行图像开运算度(§9.2.4) ch9_2_7:利用函数imtophat增强图像对比度(§9.2.4) ch9_3_1:生成了包含两个主要的局部极小值区域和几个其它局部极小值区域(§9.3.4) ch9_4_1:距离变换(§9.4) ch9_5_1:调用函数label2rgb将每个对象显示为不同的颜色(§9.5.1) ch9_5_2:提取文本图像中的某些字符对象(§9.5.2) ch9_5_3:利用函数bwarea计算对图像执行膨胀操作后面积增长的百分比(§9.5.3) ch9_5_4:利用函数bweuler进行欧拉数计算(§9.5.4) ch9_6_1:调用函数makelut和applylut实现查表操作(§9.6) ch10_1_1:利用函数imfilter实现图像滤波(§10.1.3) ch10_2_1:利用频率变换法生成一个2-D滤波器(§10.2.2) ch10_2_2:利用频率采样法生成一个2-D滤波器(§10.2.3) ch10_2_3:利用窗口法生成一个2-D滤波器(§10.2.4) ch10_2_4:设计一个截止频率为0.5的理想低通滤波器(§10.2.5)
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 信号与系统课程设计实例源码+项目(包含:图像处理(平滑、锐化与边缘提取)、求图像中细胞平均半径,matlab实现).zip # 信号与系统课程设计 [TOC] ## 图像处理(平滑、锐化与边缘提取) ### 理论基础 图像处理(image processing),用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。图像处理一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。 空间滤波是一种采用滤波处理的影像增强方法。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。平滑和锐化滤波器是处理数字图像的常用方法。 平滑的主要目的是减少图像中的噪声。锐化的主要目的是突出图像中的细节或增强已经模糊的细节。 ### 图像平滑处理 图像在获取、传输的过程中,可能会受到干扰的影响,会产生噪声,噪声是一种出错了的信号,噪声会造成图像粗糙,需要我们对图像进行平滑处理,保留有用的信号。 在imgpr1.m,imgpr2.m中我们使用均值滤波、高斯滤波、中值滤波对img1,img2进行了平滑处理,分别得到三种结果,由于img1中存在椒盐干扰,因此中值滤波效果最好,对于img2则三种效果相似。 img1(最左为原图) ![image-20230523232030867](https://zjyimage.oss-cn-beijing.aliyuncs.com/202305232320952.png) img2(最左为原图) ![image-20230523231924542](https://zjyimage.oss-cn-beijing.aliyuncs.com/202305232319447.png) ### 图像锐化处理 图像锐化*(image sharpening)*是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。 图像平滑往往使图像中的边界、轮廓变得模糊,为了减少这类不利效果的影响,这就需要利用图像锐化技术,使图像的边缘变的清晰。 公式推导: $$ ▽^2f=▽f(x+1)−▽f(x)\\ ▽f(x)=f(x+1)−f(x)\\ $$ 可得: $$ f(x)=f(x+1)−▽f(x)\\ $$ 则: $$ f(x)=f(x+1)−▽f(x)+▽^2f(x)\\ $$ 那么锐化后的图像即为: $$ g(x)=f(x+1)−▽f(x)+k▽^2f(x)\\ $$ 在不考虑精确度的情况下: $$ g(x)=f(x)+k▽^2f(x) $$ 在imgpr3.m中我们使用两种不同卷积核对img3进行了锐化处理(最左为原图): ![image-20230523232048348](https://zjyimage.oss-cn-beijing.aliyuncs.com/202305232320462.png) ### 图像边缘提取 在imgpr4.m中,我们利用高斯滤波和canny算子,对img2进行了边缘提取: ![image-20230523232154263](https://zjyimage.oss-cn-beijing.aliyuncs.com/202305232321314.png) ## 求图像中细胞平均半径 ### 原图 ![image](https://zjyimage.oss-cn-beijing.aliyuncs.com/202305282026738.jpeg) ### 预处理 #### 中值滤波 图中很明显存在椒盐噪声(黑白点),因此首先使用中值滤波进行处理。 处理后: ![p1](https://zjyimage.oss-cn-beijing.aliyuncs.com/202305282026731.jpeg) #### 高斯低通滤波与巴特沃斯低通滤波 之后使用傅里叶变换,将其转换到频域上,再进行后续操作: - 高斯低通滤波 ```matlab % 读入原始图像 img = imread('p1.jpg'); % 对原始图像进行傅里叶变换 F = fftsh

3,422

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧