最小二乘法求色彩还原矩阵

int calc_ccm(double *r, double *g, double *b, double *R, double *G, double *B, int num, double *ccm)
{
    double sum_rr=0, sum_gg=0, sum_bb=0, sum_rg=0, sum_gb=0, sum_rb=0;
    double sum_rR=0, sum_gR=0, sum_bR=0, sum_rG=0, sum_gG=0, sum_bG=0, sum_rB=0, sum_gB=0, sum_bB=0;
    int i, j;
    
    for (i=0; i<num; i++)
    {
        sum_rr += r[i]*r[i];
        sum_gg += g[i]*g[i];
        sum_bb += b[i]*b[i];
        sum_rg += r[i]*g[i];
        sum_gb += g[i]*b[i];
        sum_rb += r[i]*b[i];
        sum_rR += r[i]*R[i];
        sum_gR += g[i]*R[i];
        sum_bR += b[i]*R[i];
        sum_rG += r[i]*G[i];
        sum_gG += g[i]*G[i];
        sum_bG += b[i]*G[i];
        sum_rB += r[i]*B[i];
        sum_gB += g[i]*B[i];
        sum_bB +
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于移动最小二乘法的趋势面滤波的代码示例: ```python import numpy as np from numpy.linalg import inv def moving_least_squares(data, window_size): """ 移动最小二乘法拟合趋势面滤波 :param data: 输入数据,形状为 (n, 2),其中第一列是横坐标,第二列是纵坐标 :param window_size: 窗口大小,必须为奇数 :return: 滤波后的数据,形状与输入数据相同 """ assert window_size % 2 == 1, "窗口大小必须为奇数" n = data.shape[0] result = np.zeros_like(data) for i in range(n): # 计算当前窗口的索引 indices = np.arange(max(0, i - window_size // 2), min(n, i + window_size // 2 + 1)) m = len(indices) # 构造矩阵 A 和向量 b A = np.zeros((m, 3)) b = np.zeros((m, 1)) for j in range(m): x, y = data[indices[j], :] A[j, 0] = x ** 2 A[j, 1] = x A[j, 2] = 1 b[j, 0] = y # 计算最小二乘解 x = inv(A.T @ A) @ A.T @ b # 将拟合结果保存到结果数组中 result[i, 0] = data[i, 0] result[i, 1] = A[m // 2, 0] * x[0, 0] + A[m // 2, 1] * x[1, 0] + A[m // 2, 2] * x[2, 0] return result ``` 使用方法如下: ```python import matplotlib.pyplot as plt # 生成测试数据 x = np.linspace(0, 2 * np.pi, 100) y = np.sin(x) + 0.1 * np.random.randn(100) # 拼接成二维数组 data = np.vstack([x, y]).T # 执行移动最小二乘法滤波 filtered_data = moving_least_squares(data, 11) # 绘制原始数据和滤波结果 plt.plot(x, y, label='Original') plt.plot(filtered_data[:, 0], filtered_data[:, 1], label='Filtered') plt.legend() plt.show() ``` 可以看到,使用移动最小二乘法可以有效地去除原始数据中的噪声,还原出数据的趋势面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值