一种简单的方法是垂直投影图像,并使用适当的函数拟合投影轮廓.
这是一个尝试,具有atan形状:
% Load image
Img = double(imread('bQsu5.png'));
% Project
x = 1:size(Img,2);
y = mean(Img,1);
% Fit
f = fit(x', y', 'a+b*atan((x0-x)/w)', 'Startpoint', [150 50 10 150])
% Display
figure
hold on
plot(x, y);
plot(f);
legend('Projected profile', 'atan fit');
结果如下:
我的第一张图片得到x_0 = 149.6像素.
但是,我怀疑你能用这些图像实现1/100像素的亚像素精度,原因如下:
>正如您在配置文件中看到的那样,您的白人已经饱和(灰度级为255).当你削减真正的atan轮廓时,合身是有偏见的.如果您可以控制实验,我建议您再次使用较小的曝光时间再次进行实验.
>转换的要点并不多,因此关于转换的位置的信息并不多.通常,您的分辨率将是atan宽度的平方根(或您喜欢的任何形状).在您的情况下,这将子像素分辨率限制在1/5像素,最多.
最后,你的边缘不是严格垂直的,它们略微标题.如果您选择使用此投影方法,为了提高精度,您应该在投影前寻找纠正此倾斜的方法.但是,这不会使您的准确度提高几个数量级.
最好,