我是靠谱客的博主 朴实羊,最近开发中收集的这篇文章主要介绍图像处理-基本算法之线性变换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

线性变换是灰度变换的一种,图像的灰度变换通过建立灰度映射来调整源图像的灰度从而达到图像增强的目的。

     其公式可以表示为y(x, y) = k * x(x, y) + b;其中y(x, y)表示目标像素值,x(x, y)表示源像素值,k表示斜率,b表示截距。 

    1)当k>1时,可用于增加图像的对比度。图像的像素值在变换后全部增大,整体显示效果被增强。

    2)当k=1时,常用于调节图像亮度。

    3)当0<k<1时,效果与k>1时刚刚相反,图像的对比度和整体效果都被削弱。

    4)当k<0时,源图像较亮的区域变暗,而较暗的区域会变亮。此时可以使函数中的k=-1,d=255让图像实现反色效果。

     代码如下:

[cpp] view plain copy print ?
  1. /******************************************************************************    
  2. *   作用:     线性变换函数
  3. *   参数: pDst     输出图像的像素数组
  4. *   参数: pSrc     原始图像的像素数组
  5. *   参数: nWidth   原始图像宽度
  6. *   参数: nHeight  原始图像高度
  7. *   参数: slope      线性函数的斜率
  8. *   参数: inter      线性函数的截距
  9. *   备注: 此函数对于彩色图同样适用
  10. ******************************************************************************/ 
  11. int LineTrans(BYTE* pDst, BYTE* pSrc, int nWidth, int nHeight, double slope, double inter) 
  12.     if (!pSrc || !pDst) 
  13.     { 
  14.         return EXIT_FAILURE; 
  15.     } 
  16.  
  17.     // 灰度映射表 
  18.     BYTE map[256]; 
  19.  
  20.     // 保存运算后的临时值 
  21.     double dTemp; 
  22.     int i, j; 
  23.     for (i = 0; i < 256; i++) 
  24.     { 
  25.         // 计算当前像素变换后的值 
  26.         dTemp = slope * i + inter; 
  27.  
  28.         // 如果超界则修改其值 
  29.         if (dTemp < 0) 
  30.             dTemp = 0.0; 
  31.         else if (dTemp > 255) 
  32.             dTemp = 255; 
  33.  
  34.         // 四舍五入 
  35.         map[i] = int(dTemp + 0.5); 
  36.     } 
  37.  
  38.     // 线性变换后的值直接在映射表中查找 
  39.     for (i = 0; i < nWidth * nHeight; i++) 
  40.     {    
  41.         for (j = 0; j < 4; j++) 
  42.             pDst[i*4 + j] = map[pSrc[i*4 + j]]; 
  43.     } 
  44.     return EXIT_SUCCESS; 

  

最后

以上就是朴实羊为你收集整理的图像处理-基本算法之线性变换的全部内容,希望文章能够帮你解决图像处理-基本算法之线性变换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部