CNR(对比度噪声比)的计算(附代码)

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

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

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

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

相关资料说明,对比度噪声比是指两种组织信号强度差值与背景噪声的标准差之比。如图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))

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值