图像处理基础知识系列之四:最大似然和EM(期望最大化)算法简单梳理

图像处理基础知识系列之四:最大似然和EM(期望最大化)算法简单梳理

    

      最大似然估计(Maximum likelihoodestimation,还可以翻译为最大可能估计,主要算法原理是通过已有的数据项估算函数表达式,且保证已有数据项在函数中出现的概率最大(似然),即函数最接近理想函数。

      EM算法,指的是最大期望算法(Expectation Maximization Algorithm,又译期望最大化算法),是一种迭代算法,在统计学中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计


      这里主要想通过选取特殊的单高斯函数和混合高斯函数为例尝试从另一种角度

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个问题需要我先解释一下两个算法的原理,再提供实现代码。 迭代加权多元变化检测(IRMAD)算法:IRMAD算法是一种用于在多波段遥感影像上检测变化的算法。IRMAD算法的核心在于通过计算多波段影像中的像元值的中值和偏差,并通过加权平均法进行迭代,来检测变化,最终产生二进制变化图像。 EM期望最大化算法EM算法是一种求解最大化然函数的算法,它适用于许多机器学习和模式识别问题。EM算法通过迭代的方式,不断更新然函数的参数值,以最大化数据的然函数值。 相对辐射归一化:常常用于遥感片段中的无坐标数字(DN)值的标准化。归一化后,DN值可以用于比较不同时间或不同片段的辐射亮度。 下面是实现代码,实现的功能是将IRMAD与EM算法结合,实现相对辐射归一化。 ```python import numpy as np import scipy.stats as st def IRMAD(I, T): """ IRMAD算法,用于在多波段遥感影像上检测变化 参数: I:输入的多波段遥感影像 T:迭代次数 返回: changed:二进制变化图像 """ # 初始化变量 m, n, b = I.shape w = np.ones(b) / b mu = np.median(I, axis=2) sigma = np.zeros(b) changed = np.zeros((m, n)) # 迭代更新变量 for i in range(T): for j in range(b): sigma[j] = st.median_abs_deviation(I[:, :, j] - mu, scale='normal') for j in range(b): w[j] = 1 / (np.abs(I[:, :, j] - mu) / sigma[j] + 1e-6) w = w / np.sum(w, axis=1)[:, np.newaxis, :] mu = np.sum(w * I, axis=2) / np.sum(w, axis=2) # 产生二进制变化图像 for i in range(m): for j in range(n): if np.sum(np.abs(I[i, j, :] - mu[i, j]) / sigma) > np.sqrt(b): changed[i, j] = 1 return changed def EM(R1, R2, T): """ EM算法,用于计算相对辐射归一化 参数: R1:时间1的遥感片段 R2:时间2的遥感片段 T:迭代次数 返回: RN:相对辐射归一化结果 """ # 变量初始化 m, n = R1.shape RN = np.zeros((m, n)) mu0, mu1 = np.mean(R1), np.mean(R2) sigma0, sigma1 = np.std(R1), np.std(R2) p0, p1 = 0.5, 0.5 # 迭代更新变量 for i in range(T): # E步骤 g0 = st.norm.pdf(R1, mu0, sigma0) g1 = st.norm.pdf(R1, mu1, sigma1) w0 = p0 * g0 / (p0 * g0 + p1 * g1) w1 = p1 * g1 / (p0 * g0 + p1 * g1) # M步骤 mu0 = np.sum((1 - w0) * R1) / np.sum(1 - w0) mu1 = np.sum(w0 * R1) / np.sum(w0) sigma0 = np.sqrt(np.sum((1 - w0) * (R1 - mu0) ** 2) / np.sum(1 - w0)) sigma1 = np.sqrt(np.sum(w0 * (R1 - mu1) ** 2) / np.sum(w0)) p0 = np.mean(1 - w0) p1 = np.mean(w0) # 计算相对辐射归一化 RN = (R1 - mu1) / sigma1 return RN # 将IRMAD和EM算法结合,实现相对辐射归一化 def RRN(I1, I2, T1, T2): """ 将IRMAD和EM算法结合,实现相对辐射归一化 参数: I1:时间1的多波段遥感影像 I2:时间2的多波段遥感影像 T1:IRMAD算法的迭代次数 T2:EM算法的迭代次数 返回: RN:相对辐射归一化结果 """ m, n, b = I1.shape RN = np.zeros((m, n)) # 对每个波段分别进行IRMAD和EM算法操作 for i in range(b): R1 = IRMAD(I1[:, :, i], T1) R2 = IRMAD(I2[:, :, i], T1) RN_i = EM(R1, R2, T2) RN[:, :, i] = RN_i # 对每个像元求所有波段的均值 RN = np.mean(RN, axis=2) return RN ``` 注意,这里的IRMAD和EM算法都只处理单波段遥感影像,需要对每个波段分别处理,并最终求各波段的均值得到相对辐射归一化结果。另外,这里实现的IRMAD算法是经过简化的版本,只考虑了中值和偏差,实际上还可以考虑更多的特征。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coming_is_winter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值