• 图像编程学习笔记9——图像的锐化


    锐化(sharpening)和平滑恰恰相反,它是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波(high passfilter)。锐化处理在增强图象边缘的同时增加了图象的噪声。

    常用的锐化模板是拉普拉斯(Laplacian)模板(见(3.4)式),又是个数学家的名字,可见学好数学,走遍天下都不怕。

     

    (3.4)

    容易看出拉普拉斯模板的作法:先将自身与周围的8个象素相减,表示自身与周围象素的差别;再将这个差别加上自身作为新象素的灰度。可见,如果一片暗区出现了一个亮点,那么锐化处理的结果是这个亮点变得更亮,增加了图象的噪声。

    因为图象中的边缘就是那些灰度发生跳变的区域,所以锐化模板在边缘检测中很有用,这一点将在后面详细介绍。

    功能实现code:

    [cpp] view plaincopy
     
    1. /** 
    2. * 函数名: sharpening 
    3. * 功  能: 对图像进行锐化处理 
    4. */  
    5. void Laplacian()  
    6. {  
    7.     int temp[9] = {-1,-1,-1,-1,9,-1,-1,-1,-1};   //Laplacian 模版  
    8.     int height = bmpInfoHeader.biHeight;     
    9.     int width = bmpInfoHeader.biWidth;    
    10.     int imgSize = bmpInfoHeader.biSizeImage;  
    11.     int lineByte = (width * 8 +31) / 32 * 4;  //每行像素所占字节数  
    12.     //处理是基于原图的,所以原图的数据不能改变,用pNewBmpData存储改变之后的数据  
    13.     memcpy(pNewBmpData,pBmpData,imgSize);   //把原图数据复制给pNewBmpData  
    14.     //注意边界点不处理,所以i从1到高度-2,j类似  
    15.     double temResult;  //中间结果  
    16.     for(int i = 1; i < height - 1; i++ )  
    17.     {  
    18.         for(int j = 1; j < width - 1; j++ )  
    19.         {  
    20.             temResult = (double)(*(pBmpData + (i-1) * lineByte + j - 1) * temp[0]);  
    21.             temResult += (double)(*(pBmpData + (i-1) * lineByte + j) * temp[1]);  
    22.             temResult += (double)(*(pBmpData + (i-1) * lineByte + j + 1) * temp[2]);  
    23.             temResult += (double)(*(pBmpData + (i) * lineByte + j - 1) * temp[3]);  
    24.             temResult += (double)(*(pBmpData + (i) * lineByte + j) * temp[4]);  
    25.             temResult += (double)(*(pBmpData + (i) * lineByte + j + 1) * temp[5]);  
    26.             temResult += (double)(*(pBmpData + (i+1) * lineByte + j - 1) * temp[6]);  
    27.             temResult += (double)(*(pBmpData + (i+1) * lineByte + j) * temp[7]);  
    28.             temResult += (double)(*(pBmpData + (i+1) * lineByte + j + 1) * temp[8]);  
    29.             *(pNewBmpData + i * lineByte + j) = temResult;  
    30.         }  
    31.     }  
    32. }  
  • 相关阅读:
    Spring Boot 定时+多线程执行
    Spring Boot + Vue Element实现Excel文件上传、解析、下载(含完整实现过程)
    立个flag,2020年比2019年产出提升10倍
    《Google工作法》读书笔记
    学习Go语言(二)快速入门
    学习Go语言(一)环境安装及HelloWorld
    WPF 自定义控件缩放
    上、下位机软件通信时,结构体的内存对齐问题
    C 语言能不能在头文件定义全局变量?
    注释格式
  • 原文地址:https://www.cnblogs.com/lidabo/p/3702000.html
Copyright © 2020-2023  润新知