CNR即对比度噪声比,其被定义为峰值信号强度与背景强度SD之比。CNR是影像对比度与噪声的比值。是评价影像质量的客观指标。在某篇论文提到的评价指标中,当图像的峰值信噪比在20.12,结构相似性为0.529,对应CNR为34.84;峰值信噪比为34.14,结构相似性为0.842,对应CNR为48.25;即CNR和生成图像质量成正比,CNR越高,表示生成图像的质量越好。

对比度噪声比作为衡量图像对比度的一个指标,运用它时,需要在待处理图像上选取感兴趣区域(ROI)。CNR,等于图像在感兴趣区域内外的强度差除以图像在感兴趣预取内外的标准差之和,并取绝对值;即信号强度和噪声强度之比。CNR的值越大,表示有效信号和背景区域的差值越大,影像的对比度越好。

对于一幅图像,选取n个感兴趣区域,其中包括背景区域和有效信号区域,下面的公式给出了CNR的计算:

python音频相似性对比 音频对比相似度_深度学习

查找了很多资料,发现除上式外,CNR还有其他的表述方式,比如峰值信号强度与背景强度之比,且每种定义都有论文使用,但没有相应的实现方式。最终选择按照上述的公式,结合自己的理解手动写代码求取CNR。由于感兴趣区域是自己设定的,感觉计算比较僵硬。

python音频相似性对比 音频对比相似度_机器学习_02

相关资料说明,对比度噪声比是指两种组织信号强度差值与背景噪声的标准差之比。如图1的左图所示,选择左上角12*12的区域作为背景区域,选择中心位置的12*12区域作为感兴趣区域,分别计算两张图片的CNR。得到标签图像的CNR值为4.3003,目标图像的CNR值为3.088。

自定义选择感兴趣区域和背景区域来计算CNR的方式来自论文《Speckle noise reduction in optical coherence tomography images based on edge-sensitive cGAN》。该值的范围与论文中给出的一致。通过这种方式衡量了图像背景噪声和有效区域的对比度,在上述论文中选择了3个roi区域和1个背景区域进行CNR的计算,区域的选择是自定义的。

def calculate_cnr(img1, border=0):
    # img1 尺寸为128*128 选择左上角12*12的区域为背景区域,选择中心12*12区域为感兴趣区域
    h, w = img1.shape[:2]
    img1 = img1[border:h - border, border:w - border]

    # background = img1[1:12,1:12]
    # roi = img1[58:70,58:70]
    background = img1[1:20,1:20]
    roi = img1[50:70,50:70]
    roi = roi.astype(np.float64)
    background = background.astype(np.float64)
    print(roi)
    print(background)
    plt.subplot(1, 2, 1)
    plt.imshow(roi, cmap='hot')
    plt.title('ROI')
    plt.subplot(1, 2, 2)
    plt.imshow(background, cmap='hot')
    plt.title('background')
    plt.show()

    TheMean = abs(np.mean(roi)-np.mean(background))
    TheVar = math.sqrt(np.var(img1)+np.var(background))

    return 10 * math.log10(TheMean/TheVar)


print(calculate_cnr(target))