【图像去噪】基于全变分算法(TV)图像去噪matlab源码
发布日期:2021-05-04 12:56:06
浏览次数:25
分类:技术文章
本文共 2358 字,大约阅读时间需要 7 分钟。
用途:图像降噪(图像修复,复原中),TVloss是一种较为有效的正则项,来保持图像的光滑性
TVloss的去噪效果还算不错,但是会导致图像变得过平滑,感觉这样的话,可能加上TVLoss就会好点了。
全变分模型主要是依靠梯度下降流岁图像进行平滑处理的模型,希望在图像的内部对图像进行平滑,使得相邻像素的差值较小,,图像的轮廓(边缘)尽可能不去平滑.数学定义如下:
但是这个函数是不可微的,是非凸的,所以对于二维全变分有另外一种定义:
这个就是凸函数了. ..所以全变分求出来是一个数值.
如果仿照一维信号的去噪的话,则基于全变分的图像去噪可以看成是求解优化的问题:
function image=bldconv(g)a1=0.1;a2=0.01;PQ=paddedsize(size(g));G=fft2(g,PQ(1),PQ(2));[y x]=size(G);htemp=ones(3);h0=freqz2(htemp,PQ(1),PQ(2));R=Rcreat(y,x);H=h0;for k=1:10 %计算IMG和psfiMG=(conj(H).*G)./((conj(H).*H)+a1*R);H=conj(iMG).*G./((conj(iMG).*iMG)+a2*R);endIMG=mat2gray(real(ifft2(iMG)));image=IMG(1:size(g,1),1:size(g,2));imwrite(image,'testfile.tif');imshow(image,[]);hold on;end%===========================%计算R矩阵的函数Rcreat%===========================function R=Rcreat(y,x)%R矩阵生成子函数%by Realasking%为bdeconv.m编制i=1:y;j=1:x;RI=zeros(y,x);RJ=zeros(y,x);R=zeros(y,x);for k=1:y %向量化代码生成R的矩阵RI(k,i)=-2*cos(2*pi*i./y);endfor k=1:xRJ(j,k)=-2*cos(2*pi*j'./x);endImg=imread('Baboon1.bmp'); %读取图片PSF=fspecial('motion',3); %创建PSFgb=imfilter(Img,PSF,'circular'); %创建退化图像Img=imnoise(gb,'gaussian',0,0.01); %加噪声figure,imshow(Img)Img=double(Img);Img0=Img;PQ=paddedsize(size(Img));IMG=fft2(Img,PQ(1),PQ(2));IMG0=fft2(Img0,PQ(1),PQ(2));[nrow,ncol]=size(Img); % 获取图像尺寸大小lamda1=0.02;lamda2=0.02;dt=0.28; % 0.25-0.35为最佳G=gauss(Img,7,3);Ix = 0.5*(G(:,[2:ncol,ncol])-G(:,[1,1:ncol-1])); % x方向梯度Iy = 0.5*(G([2:nrow,nrow],:)-G([1,1:nrow-1],:)); % y方向梯度gradG = Ix.^2+Iy.^2; % 梯度大小P=1+1./(1+gradG); %自适应滤波器deltax=Img0; %zeros(nrow,ncol); %产生与图像大小相同的矩阵deltay=Img0; %zeros(nrow,ncol);htemp=ones(3);h0=freqz2(htemp,PQ(1),PQ(2));R=Rcreat(PQ(1),PQ(2));H=h0;for M=1:10 % 设置迭代次数for i=2:(nrow-1)for j=2:(ncol-1)deltax(i,j)=(Img(i+1,j)-Img(i,j))./(((Img(i+1,j)-Img(i,j)).^2+(Img(i,j+1)-Img(i,j-1)).^2/4+1).^(1-0.5.*P(i,j)))-(Img(i,j)-Img(i-1,j))./(((Img(i,j)-Img(i-1,j)).^2+(Img(i-1,j+1)-Img(i-1,j-1)).^2/4+1).^(1-0.5.*P(i-1,j)));deltay(i,j)=(Img(i,j+1)-Img(i,j))./(((Img(i+1,j)-Img(i-1,j)).^2/4+(Img(i,j+1)-Img(i,j)).^2+1).^(1-0.5.*P(i,j)))-(Img(i,j)-Img(i,j-1))./(((Img(i+1,j-1)-Img(i-1,j-1)).^2/4+(Img(i,j)-Img(i,j-1)).^2+1).^(1-0.5.*P(i,j-1)));endenddiv=deltax+deltay;DIV=fft2(div,PQ(1),PQ(2));IMG=IMG+dt*(-conj(H).*H.*IMG+conj(H).*IMG0+lamda1.*DIV);H=conj(IMG).*IMG0./(conj(IMG).*IMG+lamda2.*R);Img1=real(ifft2(IMG));Img=Img1(1:size(Img0,1),1:size(Img0,2));end
三、运行结果
四、备注
完整代码或者代写添加QQ1575304183
转载地址:https://blog.csdn.net/qq_34763204/article/details/116311693 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年03月01日 01时39分46秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Windows7 64bits下安装TensorFlow CPU版本(图文详解)
2019-04-21
Django QuerySet 方法梳理 。model外键 多对多的保存
2019-04-21
cocos2dx --- 在游戏中显示HTML页面
2019-04-21
飞鸽TCP/IP 10106错误解决
2019-04-21
WCF 双工的学习
2019-04-21
SPOJ 1825 Free tour II(树的点分治)
2019-04-21
慎用Visual Studio C++默认的hash_map----转载
2019-04-21
word中水印无法显示
2019-04-21
Directx11教程41 纹理映射(11)
2019-04-21
Qt读写INI配置文件
2019-04-21
2015第16周五
2019-04-21
VirtualBox的四种网络连接方式详解
2019-04-21
jquery mobile 记录
2019-04-21
Mysql存储过程
2019-04-21
iOS:时间格式化(标准时间转为时间戳、时间戳转为标准时间、时间戳转为日期)...
2019-04-21
C++ substr() 和 Java substring() 区别
2019-04-21
如何在java List中进行模糊查询
2019-04-21
GCC 编译优化指南(转)
2019-04-21