Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291234
  • 博文数量: 109
  • 博客积分: 2116
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 15:38
文章分类

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类:

2011-01-07 15:25:41

原理
图像锐化处理的目的是使模糊的图像变得更加清晰起来。
图像的模糊实质就是图像受到平均或积分运算造成的,因此可以对图像进行逆运算如微分运算来使图像清晰化。从频谱角度来分析,图像模糊的实质是其高频分量被衰减,因而可以通过高通滤波操作来清晰图像。但要注意,能够进行锐化处理的图像必须有较高的信噪比,否则锐化后图像信噪比反而更低,从而使噪声的增加比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理。
图像锐化一般有两种方法:一种是微分法(空域),另外一种是高通滤波法(频域)。拉普拉斯锐化法是属于常用的一种微分锐化方法。拉普拉斯运算是偏导数运算的线性组合,而且是一种各向同性 ( 旋转不变 ) 的线性运算。
变换公式为:
g(i,j)=5f(i,j)-f(i-1,j)-f(i+1,j)-f(i,j+1)-f(i,j-1)
用模板表示如下:
0   -1   0
-1   5  -1
0   -1   0
这样拉普拉斯锐化运算完全可以转换成模板运算。
我们通常用的拉普拉斯锐化模板还有另一种形式:
-1 -1 -1
-1  9 -1
-1 -1 -1

图像锐化代码:
注:首先转化为灰度图。
-----------------------------------------------------------------------------------------
void ICETEKDM6437B2LaplaceSharp(unsigned char * src, unsigned char * dst, int nWidth, int nHeight, int nPixelLine)
{
    int i,j;
   
    pImg=dbTargetImage;// 720*480
    for ( i=0;i        (*pImg)=0;
    (*pImg)=0;
    pImg1=src + 1;
    pImg2=pImg1+nPixelLine * 2;
    pImg3=pImg2+nPixelLine * 2;
    for ( i=2;i    {
        pImg++;
        x1=(*pImg1); pImg1+=2; x2=(*pImg1); pImg1+=2;
        x4=(*pImg2); pImg2+=2; x5=(*pImg2); pImg2+=2;
        x7=(*pImg3); pImg3+=2; x8=(*pImg3); pImg3+=2;
        for ( mi=2;mi        {
            x3=(*pImg1); x6=(*pImg2); x9=(*pImg3);
            m_nWork1=x5<<2; m_nWork1+=x5;// x5*5
            m_nWork2=x2+x4+x6+x8;
            m_nWork1-=m_nWork2;// x5*5-x2-x4-x6-x8
/*
如果使用另一个模板,以上两式应为:
m_nWork1=x5<<3; m_nWork1+=x5;// x5*9
m_nWork2=x2+x4+x6+x8+x1+x3+x5+x7;
*/
            if ( m_nWork1>255 )    m_nWork1=255;
            else if ( m_nWork1<0 )    m_nWork1=0;
            (*pImg)=m_nWork1;
            x1=x2; x2=x3;
            x4=x5; x5=x6;
            x7=x8; x8=x9;
        }
        pImg1+=(nPixelLine - nWidth ) * 2;
        pImg2+=(nPixelLine - nWidth ) * 2;
        pImg3+=(nPixelLine - nWidth ) * 2;
        (*pImg)=0; pImg++;
    }

    pImg = dbTargetImage;
    for ( j = 0 ; j < nHeight ; j++ )
    {
        for( i =  0; i < nWidth ; i++)
        {
            dst[j * nWidth * 2 + i * 2] = 0x80;
            dst[j * nWidth * 2 + i * 2 + 1] = *pImg++;
        }

        dst += (nPixelLine - nWidth ) * 2;
    }

}
---------------------------------------------------------------------------------------------
阅读(8151) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~