搜索
bottom↓
回复: 2

一个透明度算法的问题c1+c2*(1-a)

[复制链接]

出0入8汤圆

发表于 2023-11-21 18:21:12 | 显示全部楼层 |阅读模式
最近小弟在使用go的fyne库在嵌入式板子上画界面。要实现fyne库在嵌入式板子上运行,用buildroot编译了xorg和opengl等,最后能在lcd上显示界面。但是实时刷新摄像头数据的时候cpu占用率极高。
原因就是嵌入式板子没有gpu。fyne使用opengl作为后端,编译的opengl实际上是软光栅算法模拟的gpu所以会很慢。后来自己改了一个月fyne的底层库,把画图相关的opengl使用在framebuffer上直接
画图后,cpu从25%降到了5%左右。但是现在又出现一个问题就是透明度的混叠的问题。
要实现c1+c2*(1-a)的算法。c1是前置图像素rgb中的一个,c2是背景图中rgb中的对应的一个,a是前置图像素的alph透明度。
现在有一个dsp模块能实现f1(a,c1,c2) = c1*a+c2*(1-a),其中c1/c2是0-255的整数,a是0-1的浮点数。
我做了变换使用两个f1相加f1(a,c1,c2)  + f1(a,0,c1) = c1*a+c2*(1-a) + 0*a+c1*(1-a) = c1 + c2*(1-a) 可以满足结果要求。
但是中间还使用加法运算,最后240x320的像素cpu要累加240*320*4次,cpu占用率又高了。
后来又发现dsp的f2函数可以实现如下
0: v0&v1; 1: v0&~v1; 2: ~v0&v1; 3: ~(v0|v1); 4: v0|v1; 5: v0|~v1;6: ~v0|v1; 7: ~(v0&v1); 8: v0^v1; 9: ^(v0^v1). Default is 0 (v0&v1).
的与或非等功能。
请问大侠们可以使用f1和f2等不使用加法运算实现c1+c2*(1-a)的算法吗?谢谢大家了

出0入362汤圆

发表于 2023-11-21 22:24:41 | 显示全部楼层
a如果只用4bit呢,改成0-15的整数?  
然后 return ((c1<<4)*a + (c2<<4)*(15-a)) >> 4

出140入158汤圆

发表于 2023-11-22 00:07:01 | 显示全部楼层
本帖最后由 amigenius 于 2023-11-22 00:09 编辑

楼主什么平台?上linux应该是A核吧,A核处理320*240的Alpha很轻松,用NEON优化一下更是轻松至极。俺之前用480M的M7,640*480的拜耳toRGB,转Gray,2次3*3的卷积,2次5*5的卷积,1次欧几里得距离,还有一次池化,还要处理UI,那个才酸爽,搞了半个多月的优化,使用汇编和M7孱弱的SIMD以及各种优化,硬是把幻灯片拉到60多fps,刚好能应对客户性能需求。。。迟点打算换4核A核来做升级,上更高的分辨率和fps,4核可以随便玩,不用担心性能瓶颈。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 05:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表