1、算法原理
多尺度细节提升算法来源于论文*《DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AND MULTI-SCALE DETAIL BOOSTING》*,算法主要是解决细节增强算法中噪声和细节的平衡问题。

常规的非锐化掩蔽(USM)算法在提升细节的同时,会将噪声分量放大。多尺度细节提升算法,利用噪声分量在不同高斯尺度滤波的情况下,响应值基本一致,但是,真正的边缘细节分量,会随着高斯滤波的尺度加大,响应值将会变化。因此,作者巧妙地利用这个特征,使用不同尺度的高斯滤波结果相减,从而分离出噪声、细节。
算法步骤:
设输入原始图像为I∗I^*I∗,不同尺度的高斯滤波器为G1,G2,G3G_{1},G_{2},G_{3}G1,G2,G3,尺度系数设置为:1.0、2.0、4.0。
(1)、使用不同的尺度的高斯滤波器,对图像进行滤波。
B1=G1∗I∗,B2=G2∗I∗,B3=G3∗I∗B_{1}=G_{1}*I^{*},\quad B_{2}=G_{2}*I^{*},\quad B_{3}=G_{3}*I^{*}B1=G1∗I∗,B2=G2∗I∗,B3=G3∗I∗
(2)、对不同尺度的高斯滤波结果做差,分离出不同分量的细节。
D1=I∗−B1,D2=B1−B2,D3=B2−B3D_{1}=I^{*}-B_{1},D_{2}=B_{1}-B_{2},D_{3}=B_{2}-B_{3}D1=I∗−B1,D2=B1−B2,D3=B2−B3
(3)、不同分量的细节加权融合。
D∗=(1−w1×sgn(D1))×D1+w2×D2+w3×D3D^*=(1-w_1\times\mathrm{sgn}(D_1))\times D_1+w_2\times D_2+w_3\times D_3D∗=(1−w1×sgn(D1))×D1+w2×D2+w3×D3
2、使用python-opencv进行实现
import cv2 as cv
import numpy as np
def MSDD(input):
#不同尺度的高斯滤波
finput = np.float32(input)
B1 = cv.GaussianBlur(finput, (5, 5), 1.0)
B2 = cv.GaussianBlur(finput, (5, 5), 2.0)
B3 = cv.GaussianBlur(finput, (5, 5), 4.0)
#细节分离
D1 = finput - B1
D2 = B1 - B2
D3 = B2 - B3
#加权融合
w1 = 0.5
w2 = 0.5
w3 = 0.25
dest = np.clip((1 - w1 * np.sign(D1)) * D1 + w2 * D2 + w3 * D3 + finput, 0, 255)
return np.uint8(dest)
if __name__ == '__main__':
image = cv.imread('31.png', cv.IMREAD_GRAYSCALE)
msdd_result = MSDD(image)
display = np.concatenate([image, msdd_result], axis=1)
cv.imshow('msdd', display)
cv.waitKey()

3、小结
(1)、多尺度细节提升算法原理清晰,实现简洁。
(2)、参数调试难度不大。
(3)、搞FPGA图像处理的同学,可以尝试移植下。
407

被折叠的 条评论
为什么被折叠?



