一种高速的互信息/联合熵计算方法

最近在写一个归一化互信息的方法,由于电脑性能不够对于算法进行了若干次优化,获得了基本和c语言速度相似的归一化互信息计算速度

代码如下

import numpy as np
import math
import pandas as pd



def H_Matrix(M):  #M为图像矩阵
    s = pd.Series(M.reshape(-1))
    M_array = KKSK.values.tolist()
    M_array = np.array(M_array)
    HM = 0  # HM  熵 H(Matrix)
    HM = HM - M_array * np.log2(M_array)
    HM = np.sum(HM)
    return HM


def H_Joint(M1):  # M1是两层数组,两幅图像重叠部分
    M1 = M1.reshape(2, (M1.shape[1] * M1.shape[2]))  # 重构数组到二维
    M1 = M1.T
    M2 = M1[::, 0] * np.max(M1[::, 1]) + M1[::, 1]
    s = pd.Series(M2)
    Mhist = s.value_counts(normalize=True)
    a = M1.shape[0]
    HM = 0
    HM = HM - (Mhist * np.log2(Mhist))
    HM = np.sum(HM)
    return HM


def NMI(M):  # 定义NMI  #M为两层数组
    return (H_Matrix(M[0]) + H_Matrix(M[1])) / H_Joint(M)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值