双线性内插法--图像缩放算法
目录
一、问题描述
二、算法原理
双线性内插法
双线性内插法参数计算
三、算法效果
四、算法代码
一、问题描述
我们在处理图像的时候常常会遇到图像放大的问题,那么选择什么样的图像放大算法,能有什么样的效果,就是我们比较关心的问题了。最近(其实是很久以前),我根据网上大神们,关于双线性内插算法的资料,总结了一个用于图像缩放的算法的代码,我把它总结在博客里,希望能够方便自己和大家随时的使用。
二、算法原理
首先要介绍一下双线性内插算法的基本原理,这部分转载自 GoldBeetle 大佬的博客
https://www.cnblogs.com/GoldBeetle/archive/2018/09/17/9662871.html
双线性内插法
v(x,y) = ax + by + cxy + d
双线性内插法参数计算
已知Q11, Q12, Q21, Q22,要插值的点为P点,首先在x轴上,对R1,R2两个点进行插值
然后根据R1和R2对P点进行插值
化简得
对于边界值的处理,若x1 < 0 ,则直接令f(Q11), f(Q12) = 0
三、算法效果
这个算法期初被我用在了Qt的图像处理中,后来被我移植到了ESP8266的LCD屏幕驱动中,还是比较好用的,下面我先展示一下再Qt中放大的效果。
基于此算法,我为了方便只使用了灰度值进行数据处理,效果就是如图所示,当然也可以分为多个通道处理彩色图像。
后来我又修改此算法处理二值图像,用在ESP8266中作为文字的放大函数,使用小字库就可以在LCD屏幕上显示任意大的字体,也是非常方便的,节省了超大字体的字符所占用的空间。
四、算法代码
接下来我将代码展示一下,
输入参数分别是 输入图像的数组指针,输入图像的大小,输出图像指针,输出图像大小。
int offset_x=0,offset_y=0;#define gray_to_RGB(gray) qRgb(gray,gray,gray)
void Bilinear(uint8_t* inpBmpBuf, int src_x,int src_y,uint8_t* outpBmpBuf,int dstWidth,int dstHeight)
{double lx=1,ly=1;//缩小倍数if(src_x/dstWidth>1) {lx=src_x/(double)dstWidth;} else{lx=src_x/(double)dstWidth;}if(src_y/dstHeight>1){ly=src_y/(double)dstHeight;}else{ly=src_y/(double)dstHeight;}int x1, x2, y1, y2, Fq11, Fq12, Fq21, Fq22;double x, y, r1, Fr1, Fr2, Fp;for (int i = 0; i < dstHeight; ++i){for (int j = 0; j < dstWidth; ++j){x = lx*j; // 原图像坐标y = ly*i;// 四个坐标值x1 = floor(x); x2 = x1 + 1;// 取整ceil向上,floor向下y1 = floor(y); y2 = y1 + 1;// 四个坐标对应的灰度值Fq11 = inpBmpBuf[x1*src_y+y1] ;Fq12 = inpBmpBuf[x1*src_y+y2];Fq21 = inpBmpBuf[x2*src_y+y1];Fq22 = inpBmpBuf[x2*src_y+y2];// x方向插值和y方向插值Fr1 = 0; Fr2 = 0;Fr1 = (x2 - x) / (x2 - x1)*Fq11 + (x - x1) / (x2 - x1)*Fq21;Fr2 = (x2 - x) / (x2 - x1)*Fq12 + (x - x1) / (x2 - x1)*Fq22;Fp = (y2 - y) / (y2 - y1)*Fr1 + (y - y1) / (y2 - y1)*Fr2;// 新图像灰度值赋值if (Fp >= 0 && Fp <= 255){outpBmpBuf[i+j*dstHeight]=round(Fp); // 新图像}}}//将计算得到的像素值放入图像画布for(int i=0;i<dstWidth && i<Show_image.size().width();i++){for(int j=0;j<dstHeight && j<Show_image.size().height();j++){Show_image.setPixel(i,j,gray_to_RGB(outpBmpBuf[(i+offset_x)*dstHeight+(j+offset_y)]));}}}
今天的总结就到这里啦,欢迎大家给我点赞关注、与我交流讨论呀。O(∩_∩)O哈哈~
双线性内插法--图像缩放算法相关推荐
- [图像]图像缩放算法-双线性内插法
原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:http://blog.csdn.net/humanking7/article/details/45014879 简介: 图像缩放算法–双线 ...
- 几个图像缩放算法的比较
几个图像缩放算法的比较 前段时间由于项目的需求,需要实现图像的缩放功能,期间查找了不少关于图像缩放算法的资料,现把自己的心得整理一下. 由于研究生期间没有选修过图像处理方面的课程,所以对图像缩放的原理 ...
- 图像缩放算法(中篇)
图像缩放算法(中篇) ================================= 转载别人的,但是这篇文章写得确实太好了,所以想分享出来. 原文地址:http://blog.chinaunix ...
- 图形图像处理 —— 图像缩放算法
转自:http://blog.chinaunix.net/space.php?uid=22915173&do=blog&id=2185545 摘要:首先给出一个基本的图像缩放算法,然后 ...
- 计算机视觉-图像缩放算法-cuda实现
一.CUDA CUDA是显卡厂商NVIDIA(英伟达)推出的运算平台,能够将数据数据复制到GPU,在GPU中进行计算,然后再返回给CPU端.CUDA将GPU称为设备侧或者Device,将CPU称为Ho ...
- 图像缩放算法及速度优化
原文来自:博客园 小欣子 图像缩放算法及速度优化--(一)最近邻插值 图像缩放算法及速度优化--(二)双线性插值 --------------------以下为原文------------------ ...
- 基于FPGA 的图像缩放算法设计
介绍双线性插值算法来实现图像缩放,FPGA 硬件实现方法,包括图像数据缓冲单元.插值系数生成单元以及插值计算单元等. 图像是人类感知世界的视觉基础,是人类获取信息.表达信息的重要手段.现在研究较多的是 ...
- 图像缩放算法(下篇)
图像缩放算法(下篇) ================================= 转载别人的,但是这篇文章写得确实太好了,所以想分享出来. 原文地址:http://blog.chinaunix ...
- 图像缩放算法_opencv缩放算法
1.opencv插值介绍 opencv提供resize函数用来做图像缩放,该函数有6个参数: (1)输入图像,Mat型 (2)输出图像,Mat型 (3)输出图像大小,可用cv::Size(out_im ...
最新文章
- 一文看懂机器学习中的常用损失函数
- 还没掌握Linux文件权限与目录配置命令?就这还不点进来看看干货
- eclipse 搭建Android 开发环境(ADT安装和sdk下载,选择)
- 技术和赚钱真的冲突吗?
- 使用kubeadm安装kubernetes高可用集群
- 南加州大学等开源元学习研究库learn2learn
- iOS 下如果存在UIScrollerView 使用UIScreenEdgePanGestureRecognizer实现侧滑效果失效的问题...
- hashmap删除指定key_Java集合之HashMap源码解析(JDK8)
- php 安装redis 扩展
- Atitit if else 选择决策流程ast对比 sql java 表达式类型 binaryExpression hase left and rit expr 目录 1.1. Sql	1
- 自动驾驶 6-1: 横向车辆控制介绍 Lesson 1: Introduction to Lateral Vehicle Control
- Comsol With Matlab启动失败解决
- 苹果数据线突然不能充电了_苹果8p突然不能充电了,充不进电!
- vscode使用注意事项
- 考研数学 之 汤家凤老师来校讲座摘记 (拉格朗日定理等干货 )
- 2022年新消费趋势洞察(护肤篇):时下大热的美妆成分全面复盘
- rsa算法php,简化版(小素数版)RSA算法的PHP实现
- 无线网络优化和软件测试哪个好,你了解你的网络吗——7款网络测试工具简介,帮你优化家庭组网...
- 创客短视频拓客软件一天能增长300-1000个活跃粉
- Springboot疫情防控学生自助申报系统 毕业设计-附源码260839