图像处理(4)_灰度线性变换

来源:互联网 发布:js获取项目相对路径 编辑:程序博客网 时间:2024/05/16 19:37

上篇讲了直方图均衡化。

这篇讲的是灰度的线性变换。  这些都是比较基础的处理方法。

最近在看傅立叶变换,感慨自己那时候高数,线性代数没学会。

许多人,都觉得大学的许多科目跟实际生活没什么挂钩,我个人也这么觉得。

但相比大学空闲的时间,即便不学,也要了解下。  不然,假如某天你要用到一些东西,或许你都不知道从哪入手。

好了进入正题:

灰度线性变换:

灰度的线性变换就是将图像中所有的点按照线性灰度变换函数进行变换。该线性灰度变换函数f(x)是一个一维线性函数:              f(x)=fA*x+fB灰度变换方程为:              D2=f(D1)=fA*D+fB式中参数fA为线性函数的斜率,fB为线性函数的在y轴上的截距,D1为输入图像的灰度,D2为输出的图像灰度。当fA>1时,输出的图像的对比度增大;当fA<1时,输出图像的对比度将减小;当fA=1且fB!=0时,操作仅仅使所有像素的灰度值上移或下移,其效果是使整个图像更亮或更暗;特殊情况下,如果fA=1,fB=0时,输出图像和输入图像相同;当fA=-1,fB=255时,输出图像的灰度正好反转。
 
以上是百度知道上的解释,解释基本没问题。
 
源码:
 
 public static Bitmap GayLinesChange(Bitmap tp, double a, double b)       {           int w = tp.Width;           int h = tp.Height;           int i, j, gray;           byte [] ky = new byte[w*h];           ky = ChangeByte(tp);            for (i = 0; i < h; i++)            {                for (j = 0; j < w; j++)                {                    gray = (int)(ky[i * w + j] * a + b);                    if (gray > 255)                        gray = 255;                    else if (gray < 0)                        gray = 0;                    ky[i * w + j] = (byte)(gray);                }            }           tp = ChangeBitmap(ky, tp);           return tp;       }
关于 ChangeBitmap() 以及 ChangeByte(); 前面已经提到。
OK了。
原创粉丝点击