【数字图像处理】[1]--灰度变换增强

【数字图像处理】[1]--灰度变换增强

这个系列会讲一下关于数字图像处理的内容。
我使用的书是清华大学出版的,下面这本

这次讲关于灰度增强变换

我大概讲一下理论,详细的可以看书,我讲一下我理解的重要的。

这一节其实就一个重点,构造的一映射

f(x,y)-->g(f(x,y))

然后根据g这个函数类型不同,在分为几类

其目的就是使原图像的灰度值或拉伸或压缩或反转

1.线性灰度变换-- 负片变换
                                         这里我用负片变换举一个例子
ImageApply[-# + 1 &, imgh]
其实就是一个[0,1]-->[1,0]的映射
看一下效果
这个是原图
变换后的效果,当然我们可以直接有mma里面自带的函数
效果是一样的

2.分段函数变换--根据需要,拉伸灰度细节,对不感兴趣的抑制
f[x_, k1_, k2_, k3_, b1_, b2_, b3_, a_, b_] := 
 Piecewise[{{k1*x + b1, 0 <= x <= a}, {k2*x + b2,a < x <= b}, {k3*x + b3, b < x <= 1}}]
Plot[f[x, 2, 0.5, 1.5, 0, 0.375, -0.375, 0.25, 0.75], {x, 0, 1}]
定义如上的分段函数,根据下面的图可以看出,该函数拉伸了中间的灰度值


在对图像上的灰度值做相应的映射
data = ImageData[imgh];
Image@Map[f[#, 2, 0.5, 1.5, 0, 0.375, -0.375, 0.25, 0.75] &,data, {3}]

中间的细节看的更加清楚了

3.非线性灰度变换

先看一下我自己的解释
 
(*对数扩展--对低亮度进行大幅拉伸,高亮度被压缩*)
F[x_, c_] := c*Log[x + 1];
GraphicsRow[Plot[F[x, #], {x, 0, 1}, PlotRange -> {0, 1}, Ticks -> False,ImageSize -> Tiny] & /@ {0.7, 1, 1.3}]
可以从图上看出来高亮部分被压缩了,暗部被拉伸了,看一下效果图
同理看一下拉伸亮部
(*指数扩展--对高亮度区域大幅扩展*)
F[x_, a_, b_, c_] := Power[b, c*(x - a) - 1];
GraphicsRow[Plot[F[x, 0, E, #], {x, 0, 1}, PlotRange -> {0, 1}, Ticks -> False,ImageSize -> Tiny] & /@ {0.7, 1, 1.3}]

看一下效果
和上面的对比看,可以明显看到变亮了

其实上面两种函数也是可以的,大家可以试一下

最后还有一种函数的映射
看一下函数图像
看到最后一幅图像,大概可以猜到可以把原图的颜色转换为两种色彩(二值化)
看一下效果图
下一章会讲关于直方图变换增强的内容。

以上,所有
2016/10/10

posted on 2016-10-10 11:39  WMN7Q  阅读(385)  评论(0编辑  收藏  举报

导航