zoukankan      html  css  js  c++  java
  • 图像处理之图像的平滑与锐化

    图像处理之图像的平滑与锐化
    概念:
    锐化就是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波。锐化处理在增强图象边缘的同时增加了图象的噪声。
    平滑与锐化相反,就是滤掉高频分量,从而达到减少图象噪声,使图片变得有些模糊。
    一、灰度化
    灰度化,也就是黑白化,就是将图像进行黑白处理,使其失去色彩。而从像素点出发,就是使各个像素点的三种颜色分量R、G、B的值相同。

    常用的黑白化的方法有三种:

    第一种是最大值法(Maximum):
                       R=G=B=Max(R,G,B),这种方法处理后灰度图象的亮度会偏高,不建议采用。

    第二种就是平均值法(Average):
                       R=G=B=(R+G+B)/3,这种方法处理后灰度图象的亮度较柔和,本人就是采用的这种方法。

    第三种是加权平均值法(Weighted Average):
                       R=G=B=wr*R+wg*G+wb*B,wr、wg、wb分别为R、G、B的权值。

    鉴于本人只使用了第二种,所以就先贴上第二种的代码:
    src=imread('background.bmp');
    [m,n,channel]=size(src);
    desc=zeros(m,n);
    desc=double(desc);
    for i=1:m
    for j=1:n
    for k=1:channel
    desc(i,j)=desc(i,j)+src(i,j,k);
    end
    desc(i,j)=desc(i,j)/3;
    end
    end
    imshow(uint8(desc));

    二、锐化
    锐化就是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波。锐化处理在增强图象边缘的同时增加了图象的噪声。

    常用的锐化模板是拉普拉斯(Laplacian)模板,而本人也是采用的拉普拉斯模板进行的锐化处理。

    [-1,-1,-1]

    [-1,9,-1]

    [-1,-1,-1]

    三、平滑
    平滑与锐化相反,就是滤掉高频分量,从而达到减少图象噪声,使图片变得有些模糊。

    常用的平滑处理方法有三种:

    Box模板去噪平滑处理,也就是均一化处理。
                         Box模板是{1,1,1,1,1,1,1,1,1}

    高斯模板去噪平滑处理,就是在Box模板的基础上加入了加权系数,考虑了距离某点位置越近影响越大的因素。相比Box模板,较为清晰一些。
                         高斯模板是{1,2,1,2,4,2,1,2,1}

    中值滤波去噪平滑处理,就是将该点左右邻近的两个点的rgb值与该点自身进行比较,选择其中最中间的值赋给该点。


    最终代码:
    Img1=imread('Fig4.jpg');subplot(3,3,1);imshow(Img1);title('Fig4.jpg');
    w1=[1,1,1;1,1,1;1,1,1];w2=[1,2,1;2,4,2;1,2,1];
    w3=[-1,-2,-1;0,0,0;1,2,1];w4=[-1,0,1;-2,0,2;-1,0,1];
    k1=1/sum(sum(w1));k2=1/sum(sum(w2));
    variance=225;
    [m,n]=size(Img1);
    I1=uint8(double(Img1)+randn(m,n).*sqrt(variance)+5);
    subplot(3,3,2);imshow(I1);title('gs.png');

    II1=double(I1);
    II11=double(I1);
    II111=double(I1);
    for i=2:m-1
    for j=2:n-1
    p=[II1(i-1,j-1),II1(i-1,j),II1(i-1,j+1);II1(i,j-1),II1(i,j),II1(i,j+1);II1(i+1,j-1),II1(i+1,j),II1(i+1,j+1)];
    II1(i,j)=sum(sum((p.*w1)*k1));
    a=(p.*w1);
    pp=sort(reshape(a,1,9));
    II11(i,j)=pp(5);
    II111(i,j)=abs(sum(sum(p.*w3)))+abs(sum(sum(p.*w4)));
    end
    end
    subplot(3,3,5);imshow(uint8(II1));title('normal 均值滤波 gs.png');
    subplot(3,3,8);imshow(uint8(II11));title('normal 中值滤波 gs.png');
    subplot(3,3,7);imshow(uint8(II11));title('normal 锐化 gs.png');
    I2=Img1;
    a=rand(m,n);
    for i=1:m
    for j=1:n
    if(a(i,j)>0.975)
    I2(i,j)=255;
    elseif(a(i,j)<0.05)
    I2(i,j)=0;
    end
    end
    end
    subplot(3,3,3);imshow(I2);title('jyzs.png');
    II2=double(I2);
    II22=double(I2);
    for i=2:m-1
    for j=2:n-1
    p=[II2(i-1,j-1),II2(i-1,j),II2(i-1,j+1);II2(i,j-1),II2(i,j),II2(i,j+1);II2(i+1,j-1),II2(i+1,j),II2(i+1,j+1)];
    II2(i,j)=sum(sum((p.*w2)*k2));
    a=(p.*w1);
    pp=sort(reshape(a,1,9));
    II22(i,j)=pp(5);
    end
    end
    subplot(3,3,6);imshow(uint8(II2));title('normal jyzs.png');
    subplot(3,3,9);imshow(uint8(II22));title('normal 中值滤波 jyzs.png');

    原文:https://blog.csdn.net/qq_26399665/article/details/53496958

  • 相关阅读:
    OPENGL ES2.0如何不使用glActiveTexture而显示多个图片
    OpenGL帧缓存对象(FBO:Frame Buffer Object)
    EGLImage与纹理
    Android下Opengl ES实现单屏幕双眼显示
    comet4j开发指南
    tmp
    Ubuntu16.04下编译android6.0源码
    ubuntu下配置安装conky
    Qt编程之QImage类小结
    Linux学习,在线版
  • 原文地址:https://www.cnblogs.com/Ph-one/p/11567650.html
Copyright © 2011-2022 走看看