1

您好,我正在尝试基于本文A Direct Image Contrast Enhancement Algorithm in the Wavelet Domain for Screening Mammograms在小波域中进行乳房 X 线照片图像增强。它使用了 'db16' 小波的 4 级分解。此图像中显示了主要的增强算法,以便于阅读:图像。这是我的代码实现:

LAMBDA = 1.80

#based on eq.10 in the image
#coefficient computation
def compute(L,a,b,c):
    a_b = np.divide(a,b,out=np.zeros_like(a),where = b!=0)
    result = L * a_b * c
    print('max',np.max(result))
    return result

# For 4-level decomposition, 
C = pywt.wavedec2(img, 'db16', mode='periodization', level=4)
# C =  [cA4,(cH4,cV4,cD4), (cH3,cV3,cD3),(cH2,cV2,cD2),(cH1,cV1,cD1)]
# C =  (C[0],   (C[-4]),      (C[-3]),      (C[-2]),      (C[-1]))

cA4 = C[0]
lcA4 = cA4

# for cA3,
C3=(cA4,(C[-4]))
cA3=pywt.waverec2(C3, 'db16', mode='periodization')
#the computation
print(1)
lcD4 = tuple([LAMBDA * v for v in C[-4]])
LC3 = (lcA4,lcD4)
lcA3 = pywt.waverec2(LC3,'db16',mode='periodization')

# for cA2,
C2 = (cA3,(C[-3]))
cA2 = pywt.waverec2(C2,'db16',mode='periodization')
#the computation
print(2)
lcD3 = tuple([compute(LAMBDA,v,cA3,lcA3) for v in C[-3]])
LC2 = (lcA3,lcD3)
lcA2 = pywt.waverec2(LC2,'db16',mode='periodization')

#for cA1,
C1 = (cA2,(C[-2]))
cA1 = pywt.waverec2(C1,'db16',mode='periodization')
#the computation
print(3)
lcD2 = tuple([compute(LAMBDA,v,cA2,lcA2) for v in C[-2]])
LC1 = (lcA2,lcD2)
lcA1 = pywt.waverec2(LC1,'db16',mode='periodization')

#for cA0
C0 = (cA1,(C[-1]))
cA0 = pywt.waverec2(C0,'db16',mode='periodization')
# the computation
print(4)
lcD1 = tuple([compute(LAMBDA,v,cA1,lcA1) for v in C[-1]])
LC0 = (lcA1,lcD1)
lcA0 = pywt.waverec2(LC0,'db16',mode='periodization')

enhanced_img = lcA0.astype(np.uint8)

我正在使用的原始图像:原始图像,其分辨率为 1024x1024,最大值为 242,最小值为 0。
增强图像的结果在这里:具有相同分辨率的增强图像,但如您所见,有很多应该是黑色的区域变形,而(我认为)乳房区域有增强。

我对此原因的假设是由于我在这些小波系数中所做的计算,因为结果计算的最大值如此之大,例如 1e+16 甚至更多。但我不知道是否正确或不指出这是原因。对于计算中的零除,我通过第一行处理它,compute()我也不确定它是否正确(通过将结果设置为 0 以除以零)。
我问这个是因为没有很多小波系数操作/计算的例子,而且系数本身的值对我来说有点武断。

我希望任何人都可以帮助我实施这种增强技术。
谢谢你,对不起我的英语不好。

4

0 回答 0