王昱顺 发表于 2024-5-22 11:41:47

传感器超分辨率算法分享

在使用位置上具有关联性的一排传感器时,如果直接使用二值化算法进行定位,往往只能获得比较低的分辨率。在控制性能上并不高。
但是分辨率其实不仅仅和横向分辨率有关,也可以和纵向分辨率(传感器分辨率位数)有关,下面就分享一个简单的超分辨率定位算法,常见的应用场景就是寻迹
// 可以统计一段灰度图像中的数值峰值出现位置,返回更加精确的位置
float F_Get_Image_Summit(u16 *img, u16 img_size)
{
      u32 add_sum = 0, add = 0; // 带有数值的累加
      u8 img_cnt = 0;
      for (img_cnt = 0; img_cnt < img_size; img_cnt++)
      {
                add_sum += img_cnt * img;
                add += img;
      }
      if (add == 0)
                return (float)(img_size / 2);
      return ((float)add_sum / (float)add);
}这里给出一段示例代码,使用的数据是一串灰度图像,通过对每个数值乘以位置系数,并且累加后求均值,即可获得一个位置相关的精确定位点。
这里使用一个简单的测试代码来实验效果
int test_dat[] = { 2,2,5,9,2,2 };

int main()
{
      printf("数组返回的峰值位置为:%f", F_Get_Image_Summit(test_dat, 6));
}

可以看到返回的位置为2.59左右,符合数组内的位置值(5和9之间且偏9的位置一些)

soma 发表于 2024-5-22 12:34:22

进来学习下

jwd 发表于 2024-5-22 12:54:55

{:4_174:}
页: [1]
查看完整版本: 传感器超分辨率算法分享