灰度变换增强图像
对数变换
对数变换的作用是对图像的低灰度范围进行扩展,并对高灰度范围进行压缩,得到的结
果图像灰度分布更均匀,其通用表达式为:
y = c log 2 ( x + 1 ) y = c \log_2(x+1) y=clog2(x+1)
其中 c c c为自定义常数。
def log_transform(x, c):
x = (x - x.min()) / (x.max() - x.min())
y = c * np.log(1 + x)
out = (y - y.min()) / (y.max() - y.min()) * 255
return out.astype(np.uint8)
指数(伽玛)变换
指数(伽玛)变换的一般公式为:
y = c x γ y = c x^{\gamma} y=cxγ
当
γ
<
1
\gamma < 1
γ<1 时,扩展图像暗区、压缩图像亮区。暗区对比度增强、亮区对比度减弱。
γ
>
1
\gamma > 1
γ>1时,压缩图像暗区,扩展图像亮区。暗区对比度减弱,亮区对比度增强。
def gamma_transform(x, c, gamma):
x = (x - x.min()) / (x.max() - x.min())
y = c * np.power(x, gamma)
dst = (y - y.min()) / (y.max()-y.min()) * 255
return dst.astype(np.uint8)
直方图均衡化变换
设原始图像X和目标图像Y的灰度直方图分布为:
p
x
(
x
k
)
,
k
=
0
,
1
,
⋯
,
N
−
1
p
y
(
y
k
)
,
k
=
0
,
1
,
⋯
,
N
−
1
p_ {x} ( x_ {k} ),k=0,1, \cdots ,N-1 \\ p_ {y} ( y_ {k} ),k=0,1, \cdots ,N-1
px(xk),k=0,1,⋯,N−1py(yk),k=0,1,⋯,N−1
直方图均衡化映射函数 T ( ⋅ ) T(\cdot) T(⋅)为:
y k = T ( x k ) = int ( ( N − 1 ) ⋅ ∑ j = 0 k p x ( x j ) ) , k = 0 , 1 , ⋯ , N − 1 y_ {k} =T( x_ {k} )=\text{int}((N-1)\cdot\sum _ {j=0}^ {k} p_ {x} (x_j)),k=0,1, \cdots ,N-1 yk=T(xk)=int((N−1)⋅j=0∑kpx(xj)),k=0,1,⋯,N−1
第k个灰度值的从0到k的累积分布(0-1)乘以N-1,是整个图像的灰度值在0-N-1范围内均衡。
def equalize_hist(img, N=256):
H, W = img.shape
out = img.copy()
sum_h = 0
for i in range(0, 256):
ind = np.where(img == i)
sum_h += len(img[ind])
p_x = sum_h / (H * W)
out[ind] = (N-1)* p_x
out = out.astype(np.uint8)
return out