《数字图像处理》笔记 Ch2 灰度变换

背景

这一章主要讨论两类空间域处理方法:** 亮度变换和空间滤波**。
空间域处理的表达式为
g ( x , y ) = T [ f ( x , y ) ] g(x, y) = T[f(x, y)] g(x,y)=T[f(x,y)]

灰度变换函数

在灰度图中每个像素的值代表该点灰度,因此灰度变换可以表示为
s = T ( r ) s = T(r) s=T(r)

函数imadjuststretchlim

在matlab里的亮度调整函数为imadjust。使用方式是:

g = imadjust(f, [low_in high_in], [low_out high_out], gamma)

stretchlim用于发现图像中用以拉伸对比度的范围,使用方式是

Low_High = stretchlim(f)

Python实现

  • imadjust函数
    根据imadjust函数的性质,大概推测其函数

    r ′ = r − l o w i n h i g h i n − l o w i n r' = \frac{r - low_{in}}{high_{in} - low_{in}} r=highinlowinrlowin
    T ( r ) = { h i g h o u t r &gt; h i g h i n ( h i g h o u t − l o w o u t ) r ′ g a m m a + l o w o u t l o w i n &lt; r &lt; = h i g h i n l o w o u t r &lt; l o w i n T(r) = \left\{ \begin{aligned} high_{out} &amp; &amp; r &gt; high_{in} \\ (high_{out} - low_{out})r&#x27;^{gamma} + low_{out} &amp; &amp; low_{in} &lt;r &lt;= high_{in} \\ low_{out} &amp; &amp; r &lt; low_{in} \end{aligned} \right. T(r)=highout(highoutlowout)rgamma+lowoutlowoutr>highinlowin<r<=highinr<lowin

因此代码实现为:

def imadjust(img, inLim, outLim, gamma = 1):
    img = img.astype(np.float64) / 255
    high = img > inLim[1]
    low = img < inLim[0]

    r_ = (img - inLim[0]) / (inLim[1] - inLim[0])
    img_ = (outLim[1] - outLim[0]) * (r_ ** gamma) + outLim[0]
    img_[high] = outLim[1]
    img_[low] = outLim[0]
    return (img_ * 255).astype(np.uint8)

def stretchlim(img):
    low = float(np.min(img))
    high = float(np.max(img))
    return (low / 255, high / 255) 

这里需要注意的是,读入的灰度图的数据格式为uint8,首先要将其转换为 [ 0 , 1 ] [0, 1] [0,1]的浮点数进行运算。

直方图处理与函数绘图

生成直方图

在matlab直方图工具箱中,核心直方图函数是imhist(f, b)用法为:

h = imhist(f, b);

h为返回的灰度直方图结果。

直方图均衡

在matlab中,可以使用histeq(f, nlev)进行直方图均衡。

g = histeq(f, nlev);

nlev是为输出图像设定的灰度级数,默认为64,一般上设置为256 。

Python实现

在Python中实现直方图生成、均衡可以使用Opencv中自带的函数calcHist()equalizeHist()

  • cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]])
    • images为输入的图像。
    • channels为所需要计算的通道数量。
    • mask为掩膜(为和图像大小一样的矩阵,矩阵的值0为不需要处理、1为需要处理,None为默认处理全图)。
    • histSize将灰度分为多少层,一般为256。
    • ranges像素值的范围,一般为[0,255]表示0~255。
  • cv2.equalizeHist(img)直接将图像灰度均衡化。

需要注意的是equalizeHist的输入必须是灰度图,否则会报错。

直方图匹配

占坑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值