Halcon|图像的gamma变换、log变换、pow变换
工业相机像元深度
我们将工业相机采集图像的比特位数,称为像元深度,通常是8~16bit。像元深度定义了灰度由暗道亮的灰阶数,例如,对于8bit 的相机,0代表全暗(黑),255 代表全亮(白)。同理,10bit 图像有1024个灰阶,12bit 图像有4096个灰阶。
在可视化过程中,显示器一般只有8bit,对于工业相机采集到的大于8bit 的数据,一般需要进行处理,方可符合人的视觉感受。
halcon中提供了线性变换、gamma变换、log变换、pow变换进行图像变换的方法。线性变换网上教程很多,在这里不再多说。
gamma变换
halcon提供了对图像进行gamma变换的算子:gamma_image,用法如下:
gamma_image(Image,GammaImage,Gamma,Offset,Threshold,MaxGray,Encode)
gamma变换是一种特殊的指数变换类型,其变换原则如下:
其中,Image为原始图像,GammaImage为变换后图像。
G
G
G为原始图像的灰度值,
G
′
G'
G′为Gamma变换后图像的灰度值。
m为MaxGray,最大灰度值,根据图像的类型填写,对于8bit的图像,MaxGray为255;对于Nbit的图像,MaxGray为
2
N
−
1
2^N-1
2N−1。o表示Offset,
γ
\gamma
γ表示Gamma。
gamma变换的核心是gamma变换公式中的指数部分。然而,当
G
′
=
0
G'=0
G′=0时,gamma变换公式中的指数部分的值为负值,这自然是我们不希望的。为了使得
G
′
=
0
G'=0
G′=0时,
G
=
0
G=0
G=0,我们在gamma变换公式中又增加了线性部分。t表示线性部分与指数部分的阈值Threshold。s是使得线性部分和指数部分连续的参数,由Gamma、Offset、Threshold、MaxGray等共同决定。
我们通过
G
G
G到
G
′
G'
G′的映射定义了gamma变换,自然将
G
′
G'
G′到
G
G
G的映射称为gamma反变换。当Encode为true时,执行gamma变换,为false时,执行gamma反变换。
gamma反变换公式如下,其中
t
′
=
s
t
t'=st
t′=st:
另外,halcon还给定了标准gamma变换的参数设置。对于sRGB standard,Gamma = 1.0/2.4, Offset = 0.055, Threshold = 0.0031308;对于HDTV video standard,Gamma = 0.45, Offset = 0.099, Threshold = 0.018。
工业相机采集的12bit原始图像:
sRGB标准格式gamma变换后的图像:
log变换
halcon提供了对图像进行log变换的算子:log_image,用法如下:
log_image(Image,LogImage,Base)
Log变换即对数变换,其变换原则如下:
G
′
=
l
o
g
B
a
s
e
G
G'=log_{Base}{G}
G′=logBaseG其中,Image为原始图像,LogImage为log变换后图像。Base为对数的底,一般取自然对数e, 2, 10等。
取自然对数e做log变换后的图像:
pow变换
halcon提供了对图像进行pow变换的算子:pow_image,用法如下:
pow_image(Image,PowImage,Exponent)
pow变换即指数变换,其变换原则如下:
G
′
=
G
E
x
p
o
n
e
n
t
G'=G^{Exponent}
G′=GExponent其中,Image为原始图像,PowImage为pow变换后图像。Exponent为指数,一般取0.25, 0.5, 2, 3, 4等。
取Exponent为2.25做pow变换后的图像: