1

我需要对两组 3D 数据执行一些基本的直方图匹配。这是更大算法的一部分。

我的目标是通过最小化以下成本函数来执行此操作:

|| cumpdf(f(A)) - cumpdf(B) || .^2

在哪里:

cumpdf 是累积直方图

f() 是线性变换 a*A + b 其中 a/b 是要
确定的仿射系数

A是要变换的图像,B是要匹配的图像

我正在使用 lsqcurvefit 但是我遇到了一些麻烦,因此真的需要一些帮助。

A(maskA==0)=0;
B(maskB==0)=0;

[na,~] = hist(A(maskA~=0),500);
na = na ./ numel(A(maskA~=0));
x_data = cumsum(na);

[nb,~] = hist(B(maskB~=0),500);
nb = nb ./ numel(B(maskB~=0));
y_data = cumsum(nb);

xo = [1.5 -200];
[coeff,~] = lsqcurvefit(@cost,xo,x_data,y_data);

function F = cost(x,xc)
F = x(1).*A + x(2);
[nc,~] = hist(C(maskA~=0),500);
nc = nc / numel(C(maskA~=0));
xc = cumsum(nc);

Amask 和 Bmask 只是代表我需要做的一些索引。

我的问题是:我知道以上是错误的。但是,关于成本函数和目标,我认为它最能代表我想做的事情。一些帮助我将不胜感激!

4

0 回答 0