我需要对2组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只代表我需要做的一些索引。
我的问题是:我知道上面的错误。但是,我认为它代表了我想要做的最好的成本函数和目标。一些帮助我非常感激!