论文题目:
Image Enhancement and Space-variant Color Reproduction Method for Endoscopic Images using Adaptive Sigmoid Function
1 摘要
首先,使用YCCBR转换矩阵,将彩色图像分为亮度分量和色度分量,对均匀分布的亮度像素应用了具有两个控制参数的自适应Sigmoid 型函数。空间变色再现通过基于纹理信息转移和修改旧的色度,生成新的色度分量。最后,将新的亮度和色度分量转换为RGB彩色图像。提出的方法突出了一些组织和血管特征以及病变和息肉中的凹坑形态。并在图像质量、聚焦值、颜色再现效率和视觉表示统计量等方面,与其他相关方法的性能进行了比较。
2 理论介绍
该方法包括基于自适应Sigmoid 型函数的图像增强和空间交换颜色复制两个阶段。图1为所提方法的总体示图。该系统不操纵R、G和B组件,而是首先使用(1)将彩色内窥镜图像转换为YCbCr彩色空间。之后,Y用于图像增强,CB和CR用于生成新的色度图。
2.1 图像增强
Sigmoid 型函数是一种连续的非线性函数,在神经网络中经常被使用。使用
f
(
x
)
f(x)
f(x)作为输入,Sigmoid 型函数为
在训练模式下,我们观察到,在一定的指数下,图像突出了一些血管特征和黏膜结构,但它随图像而变化。
为了控制指数并将其限制在某一点上,我们在Sigmoid 型函数中引入了两个系数。使用 x x x作为输入, g g g表示增益, k k k表示截止,Sigmoid 型函数如下所示:
通过控制这两个参数,可以突出显示图像的不同特征。由于该函数对像素值进行自适应变换,我们将其命名为自适应Sigmoid 型函数。这两个参数由两个不同的方程式控制,我们将在后面讨论。
在应用所提出的自适应Sigmoid 型函数之前,图像的像素使用直方图均衡化进行均匀分布。设
Y
Y
Y是一个给定的图像,由
n
n
n个从0到
L
−
1
L-1
L−1的整数像素强度矩阵表示为
m
m
m。设
p
p
p表示可能强度的bin的归一化直方图。
其中,
z
=
0
,
1
,
.
.
.
,
L
−
1
z = 0, 1, ..., L-1
z=0,1,...,L−1图像的灰度值。将均匀分布的图像
g
g
g定义为:
其中,
f
l
o
o
r
(
)
floor()
floor()将像素值取整为最接近的整数。然后,使用(6)和均匀分布的像素值来生成截止值
k
k
k,并使用(7)来增益
g
g
g。在这里,输入的
x
x
x是均匀分布的像素。
其中,
A
=
100
A=100
A=100,
S
m
=
6
S_m=6
Sm=6和
S
n
=
5
S_n=5
Sn=5.这些值是从训练模式中启发式地收集起来的。这些值产生所需的指数,突出了内镜图像中细微的血管和粘膜结构。从图2中,我们可以看到黏膜和血管的特征以及一些凹坑形态。
2.2 色彩重构
该方法通过对原始灰度图像像素之间的亮度和纹理信息进行匹配,得到了色度信息。在开始时,使用(8)对亮度和两个色度在0-1值之间进行了归一化。
在匹配过程中,从所有像素中减去原始灰度图像的每个像素,并使用(9)定位位置。
在这里,
l
o
c
a
t
e
(
)
locate()
locate()保持为零的位置,
f
i
,
j
o
r
(
x
)
f_{i,j}^{or}(x)
fi,jor(x)是原始图像的单个像素,
f
o
r
(
x
)
f^{or}(x)
for(x)是所有的像素。现在基于(9),可以发生三种场景。首先,它可以定位一个单一位置的几个位置。在这种情况下,使用(10)从多个Cb和多个Cr的一个Cr生成单个Cb。
第二,它可能只定位一个单一的一个位置。然后根据单个位置生成单个Cb和Cr。第三,它可能根本不会定位到任何位置。在这种情况下,它将生成默认值0.5作为相应位置的Cb和Cr。最后,利用(11)将新生成的Cb、Cr和增强的luma Y转换为RGB图像。图3为使用该方法得到的原始图像及其相应的增强彩色图像。
3 结论
4 总结
这篇论文主要是通过构造自适应sigmod函数对灰度图像进行增强,然后通过色彩重构对图像进行还原,从而达到对彩色图像增强的目的。
5 code
if __name__ == '__main__':
imgPath = "./img/1.jpg"
img = cv2.imread(imgPath)
yCbCr = cv2.cvtColor(img, cv2.COLOR_RGB2YUV)
Y, Cb, Cr = cv2.split(yCbCr)
k ,g = UniformlyDistributedImage(Y)
enhanceImg = np.copy(Y)
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
enhanceImg[i, j] = Y[i, j] * AdaptiveSigmoid(Y[i, j], g, k)
# print(enhanceImg[i, j])
cv2.imshow("img", Y)
# cv2.waitKey(0)
cv2.imshow("enhanceImg", enhanceImg)
cv2.waitKey(0)