叠加图像思路

叠加如下图所示的辅助线(1920*1080)

叠加图像思路_第1张图片

法1:

整幅图转单bit图存到BRAM,再叠加到图像上,部分线段有变色要求,各种组合下来需要存4张图片。

存一幅图需要:1920*1080/8=259200Byte==64个bram(占k7-bram的15%),存4张图需要消耗60%的bram;

___________________________________________________________

法2:

把黑点坐标算出来(只算斜线),存到bram,输出图像的时候按坐标替换像素点。

先评估1条斜线:

一个点的坐标占用32bit,一条斜线存1080个坐标;占用2个bram;

一共9条斜线,总共占用18个bram(占k7-bram的5%);

___________________________________________________________

法3:

只保存斜线2端点的坐标,实时计算直线上点的坐标,按坐标替换像素点。

不占用BRAM,FPGA实现的代码会比较繁琐,后期维护不是很方便。

___________________________________________________________

目前工程BRAM用80%(视频拼接/组合都要对输入的待拼接的视频做提前缓存,主要消耗bram资源);法2和法3都可行。法2估计1周左右,法3估计1-2周。

___________________________________________________________


法1:整幅图转单bit图存到BRAM,再叠加到图像上(适用于多个小图像块的叠加,比如文字菜单/logo图像)

  1. 把图像都存在bram中(宽*高的区域,宽通常取8的倍数);
  2. 按行/列计数,计算出BRAM读地址;
  3. 根据读地址在bram中取数;
  4. 在宽*高的区域中替换像素;

优点:可以实现不规则图形的叠加;

缺点:需要把所有的图形提前存下来,不适合多个大图的叠加(BRAM资源紧张)。

___________________________________________________________

法2:把黑点坐标算出来,存到bram,输出图像的时候按坐标替换像素点。(适用于大图像中点数比较少的情况,比如曲线)

  1. 把曲线(任意形状)的所有坐标计算出来(excel/matlab/......);
  2. 坐标规定为{行坐标,列坐标}={16bit,16bit}格式,按行坐标从小到大排列;
  3. 排好序的坐标存为coe文件,{行坐标,列坐标}拼成1个32bit数;
  4. 读BRAM使能信号:BRAM_RD_EN,==读出的数的[31:16](行坐标)小于行计数;
  5. BRAM_RD_EN有效时自加BRAM的读地址;
  6. 把读出的目标行的所有坐标打拍缓存(根据BRAM_RD_EN信号打拍),一行可能有多个坐标,每行最多有n个坐标就打n拍;
  7. 对比打拍的n个坐标和{行计数,列计数},相等时替换像素;

优点:可以实现复杂曲线的叠加;且可以通过arm等计算单元计算出曲线坐标,再把坐标写入BRAM,实现动态刷新的效果;

缺点:不适合总点数多的情况(比如较大的图形,BRAM资源紧张)。

___________________________________________________________

法3:只保存斜线2端点的坐标(先算出斜线方程),实时计算直线上点的坐标,按坐标替换像素点。(2次曲线/3次曲线/圆等其他曲线方程也可以实现;但是需要码FPGA代码,相对比较复杂,可维护性欠佳)

  1. 根据已知条件计算出曲线方程(需要考虑负数的处理);
  2. 根据行计数和列计数计算出当前坐标是否满足方程;
  3. 当前坐标满足方程(FPGA计算肯定有误差,需要指定误差范围)时替换像素;

优点:不占用BRAM资源;

缺点:实现过程较复杂(需要乘/平方/3次方等操作),后期维护性欠佳(一定要尽可能多的写注释),不适合图/文字等不规则图形叠加的情况。

你可能感兴趣的:(fpga,fpga开发)