归一化互相关损失

LNCC

在医学影像配准论文《U-Net vs Transformer: Is U-Net Outdated in Medical Image Registration》中,使用了LNCC(local normalized
cross-correlation局部归一化相关损失)作为相似性度量。查阅文章引用的论文,描述如下:
LNCC

LNCC代码:

class NCC(torch.nn.Module):
    """
    local (over window) normalized cross correlation
    """
    def __init__(self, win=9, eps=1e-5):
        super(NCC, self).__init__()
        self.win_raw = win
        self.eps = eps
        self.win = win

    def forward(self, I, J):
        ndims = 3
        win_size = self.win_raw
        self.win = [self.win_raw] * ndims

        weight_win_size = self.win_raw
        weight = torch.ones((1, 1, weight_win_size, weight_win_size, weight_win_size), device=I.device, requires_grad=False)
        conv_fn = F.conv3d

        # compute CC squares
        I2 = I*I
        J2 = J*J
        IJ = I*J

        # compute filters
        # compute local sums via convolution
        I_sum = conv_fn(I, weight, padding=int(win_size/2))
        J_sum = conv_fn(J, weight, padding=int(win_size/2))
        I2_sum = conv_fn(I2, weight, padding=int(win_size/2))
        J2_sum = conv_fn(J2, weight, padding=int(win_size/2))
        IJ_sum = conv_fn(IJ, weight, padding=int(win_size/2))

        # compute cross correlation
        win_size = np.prod(self.win)#返回给定轴上的数组元素的乘积
        u_I = I_sum/win_size
        u_J = J_sum/win_size
  
        #cross:计算协方差 I_var和J_var:计算方差部分
        cross = IJ_sum - u_J*I_sum - u_I*J_sum + u_I*u_J*win_size
        I_var = I2_sum - 2 * u_I * I_sum + u_I*u_I*win_size
        J_var = J2_sum - 2 * u_J * J_sum + u_J*u_J*win_size

        cc = cross * cross / (I_var * J_var + self.eps)

        # return negative cc.
        return -1.0 * torch.mean(cc)

补充

C o v ( x , y ) = E [ ( X − E ( X ) ) ( Y − E ( Y ) ) ] = E [ X Y − X E ( Y ) − Y E ( X ) + E ( X ) E ( Y ) ] Cov(x,y)=E[(X-E(X))(Y-E(Y))] =E[XY-XE(Y)-YE(X)+E(X)E(Y)] Cov(x,y)=E[(XE(X))(YE(Y))]=E[XYXE(Y)YE(X)+E(X)E(Y)]
D ( X ) = E [ ( X − E ( X ) ) 2 ] = E [ ( X 2 − 2 X E ( X ) + E ( X ) 2 ] D(X) = E[(X-E(X))^2]=E[(X^2-2XE(X)+E(X)^2] D(X)=E[(XE(X))2]=E[(X22XE(X)+E(X)2]

参考:NCC

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
模板匹配归一化互相关是一种常见的模板匹配方法,用于在图像中寻找与给定模板最相似的区域。它使用归一化互相关来计算模板与图像的相似度。 归一化互相关(Normalized Cross-Correlation, NCC)是一种衡量两个向量、窗口或样本之间相关性的方法。它的取值范围在-1到1之间,-1表示两个向量不相关,1表示两个向量完全相关。 模板匹配归一化互相关的优点是易于实现,并且在模板/数据库较小的情况下可以快速工作。然而,它的缺点是在模板/数据库较大的情况下速度较慢,并且对于任何类型的旋转或比例变化都非常敏感。 以下是使用模板匹配归一化互相关的示例代码: ```python import cv2 # 读取图像和模板 image = cv2.imread('image.jpg') template = cv2.imread('template.jpg') # 将图像和模板转换为灰度图像 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray_template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) # 使用归一化互相关进行模板匹配 result = cv2.matchTemplate(gray_image, gray_template, cv2.TM_CCORR_NORMED) # 获取匹配结果的最大值和位置 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) # 绘制矩形框标记匹配区域 top_left = max_loc bottom_right = (top_left[0] + template.shape[1], top_left[1] + template.shape[0]) cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2) # 显示结果图像 cv2.imshow('Result', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码使用OpenCV库进行模板匹配归一化互相关。首先,读取图像和模板,并将它们转换为灰度图像。然后,使用`cv2.matchTemplate`函数计算归一化互相关,并通过`cv2.minMaxLoc`函数获取匹配结果的最大值和位置。最后,绘制矩形框标记匹配区域,并显示结果图像

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值