自适应TV去噪模型.m
上传用户:adtechcn
上传日期:2022-08-11
资源大小:1k
文件大小:1k
源码类别:

图形图像处理

开发平台:

Matlab

  1. Img=imread('lenna.bmp');%读取图片
  2. PSF=fspecial('motion',3);%创建PSF
  3. gb=imfilter(Img,PSF,'circular');%创建退化图像
  4. Img=imnoise(gb,'gaussian',0,0.01);%加噪声
  5. figure,imshow(Img)
  6. Img=double(Img);
  7. Img0=Img;
  8. [nrow,ncol]=size(Img); % 获取图像尺寸大小
  9. lamda=0.02;
  10. dt=0.28;% 0.25-0.35为最佳
  11. G=gauss(Img,7,3);
  12. Ix = 0.5*(G(:,[2:ncol,ncol])-G(:,[1,1:ncol-1]));% x方向梯度
  13. Iy = 0.5*(G([2:nrow,nrow],:)-G([1,1:nrow-1],:));% y方向梯度
  14. gradG = Ix.^2+Iy.^2;% 梯度大小
  15. P=1+1./(1+gradG); %自适应滤波器
  16. deltax=zeros(nrow,ncol); %产生与图像大小相同的矩阵
  17. deltay=zeros(nrow,ncol);
  18. for M=1:200 % 设置迭代次数
  19. for i=2:(nrow-1)
  20. for j=2:(ncol-1)
  21. 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)));
  22. 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)));
  23. end
  24. end
  25. div=deltax+deltay;
  26. Img=dt.*div-dt.*lamda.*(Img-Img0)+Img;
  27. end
  28. figure,imshow(mat2gray(Img))