笔者学识有限。 本博客旨在对mitre_sfr核心代码进行简单注解, 详细内容读者仁者见仁智者见智。
ESF一条白变黑(黑变白)的线。IOS SFR算法希望通过对刀口进行超采样, 生成一条更平滑的的变化曲线, 降低计算的误差。
1. locate_centroids函数用于定位ROI每一行的质心;
2. fit函数拟合locate_centroids定位出来的质心, 确定刀口的斜率;
3. 然后bin_to_regular_xgrid函数基于前面两个函数的结果把ROI区域超采样为单行的ESF。
/*****************************************************************************/
// 寻找质心
// shifts --> 当前行与中心行的距离
// temp --> 当前行的质心与中心行的质心的距离
// offset --> 中心行质心的位置
unsigned short locate_centroids(double *farea, double *temp,
double *shifts,
unsigned short size_x, unsigned short size_y,
double *offset) {
unsigned long i, j;
double dt, dt1, dt2;
/* Compute the first difference on each line. Interpolate to find the
centroid of the first derivatives. */
// 求质心C
// C = Σx*(f(x+1)-f(x))/Σ(f(x+1)-f(x))
for (j = 0; j < size_y; j++) {
dt = 0.0;
dt1 = 0.0;
for (i = 0; i < size_x-1; i++) {
dt2 = farea[(j*(long)size_x)+(i+1)] - farea[(j*(long)size_x)+i]; // 计算每个点的导数
dt += dt2 * (double)i; //
dt1 += dt2;
}
shifts[j]=dt/dt1; // 质心
}
/* check again to be sure we a