1.BMP图片文件格式

参见博客BMP文件格式详解,这篇博客写的非常详细,不想看的话可以看下面的简单介绍,简介大多引用自这里。

BMP文件的数据按照从文件头开始的先后顺序分为四个部分:bmp文件头(bmp file header);位图信息头(bitmap information);调色板(color palette);位图数据(bitmap data)。下面是8位BMP图像和24位BMP图像的简介,如果觉得不详细的话就去看上面的博客。

BMP文件头:


BMP信息头:

8位BMP文件格式: BMP文件头(14Byte),位图信息头(40字节),调色板(256*4字节。是这么来的:8位一共可以表示256种颜色,每种颜色4字节(R,G,B,Alpha)),位图数据(每行(图片的宽×每个像素的Byte)必须是4的倍数,不足会用0填充)。下面以一张图片的数据简单说明一下。

下面这张图片是256×256的,大小是65.05KB:

下面是这张图的部分数据及对应的信息,其中数据部分的数据值对应的就是调色板的数据,如47,在调色板(B,G,R,Alpha)中就是(47, 47, 47, 0),大于一字节的数据是用小端形式存储的(不懂小端模式的话可以参见这篇博客):
24位BMP图片格式: BMP文件头(14Byte),位图信息头(40字节),位图数据(每行(图片的宽×每个像素的Byte)必须是4的倍数,不足会用0填充)。下面以一张图片的数据简单说明一下。

下面这张图片是256×256的,文件大小是192.05KB

下面是这张图的部分数据及对应的信息,其中文件头和信息头和8位BMP是一样的,不过没有调色板,直接用24位表示一种颜色(如图中的39,16,52表示R(52)G(16)B(39))。大于一字节的数据也是用小端形式存储的。

2.拉格朗日差值简介

问题提法(来自XTU数值分析课程的PPT):
通俗一点说也就是通过几个已知的样本点来求估计一个位置的点的函数值。

一般求法(来自百度):

3.运用拉格朗日差值对BMP图片进行处理

原理(来自XTU数值分析课程的PPT):

以上图中的6×6缩小到3×3为列子,解释一下此算法的过程:

  1. 求出缩小图片列对应原图列中的位置(g(i)),想象一下缩放的过程就能明白为什么这样算。
  2. 求出每个g(i)附近的n个点(n越大,精度越高)。
  3. 把每个g(i)附近的n个点(对应原图中的点,如2.5附近的三个点是2,3,4这三个点的函数值就是原图中的颜色值(RGB),这n个点也可能有小于0或者大于原图宽度的点,如果有的话就做对称处理,具体参见第6步)当成样本点,利用拉格朗日差值算法算出g(i)的函数值,注意算出来的值要转换成整数。
  4. 以8位图中2.5附近的三个点2,3,4为列子计算(假设2 ,3,4点的数据值分别是22,100,33):
  5. 如果是8位图片的话,算出来的值代表的就是该点RGB(8位图中的RGB和数据值是一样的,Alpha为0,有兴趣可以调下Alpha看看有什么效果)。如果是24位图片的话就当成3个8位图片处理,依次对R、G、B进行处理。
  6. 如果算出来的n个值中有小于0或者大于原图宽度的值,就对其进行对称处理,具体方法如下:假如插值需要3个样本,它们是(-1,f(-1)),(0,f(0)),(1,f(1)),那么其中的(-1,f(-1))要做对称处理。处理后三个样本为(-1,f(1)),(0,f(0)),(1,f(1)),即f(-1)变成f(1),不过算的时候还是用-1算,只是函数值变了。
  7. 对图片中的每一行都进行行处理。
  8. 经过7步的处理后,我们把6×6缩成了6×3,还要进行行处理来缩成3×3。
  9. 注意每行数据必须是4的倍数,不足的要进行0填充。
  10. 处理后图的第k行,从离它最近的原图行取样进行插值。对于处理后图的第k行,原图中离它最近的行是round(k*(H0-1)/(H-1)),H0是原图高度,H是处理后图像的高度。原图共8行,第0行~第7行,即H0=8(即原图高度为8)。缩放后图像的行数为4行,第0行~第3行,即H=4。计算缩放图像的第1行,应从原图的第round(1*(8-1)/(4-1))=round(2.333…)=2行取样。计算缩放图像的第2行,应从原图的第round(2*(8-1)/(4-1))=round(4.666…)=5行取样。计算缩放图像的第3行,应从原图的round(3*(8-1)/(4-1))=round(7)=7行取样。
  11. 放大缩小原理一样。

代码实现(Java版本)

可以下载我写的戳这里,不过写的很菜QAQ。

基于拉格朗日差值算法的BMP图像缩放相关推荐

  1. B样条差值算法图像放大的学习和实现

    一个简单的 双三次B样条算法 实现的 图像放大 B样条算法图像放大的学习和实现 一.总体设计思路 本次B样条图像放大的实现建立在之前做的图像的显示,双线性插值图像放大的基础上.因为有之前的基础,所以实 ...

  2. P4593-[TJOI2018]教科书般的亵渎【拉格朗日差值】

    正题 题目链接:https://www.luogu.com.cn/problem/P4593 题目大意 场上有若干只怪,最高的为nnn,每个怪血量不同,有mmm个血量不存在. 不停释放亵渎(全场打一, ...

  3. 最邻近差值算法(nearest)和双线性插值算法(bilinear)

    最邻近插值算法和双线性插值算法--图像缩放 加载图像时经常会遇见要缩放图像的情况,这种时候如何决定缩放后图像对应像素点的像素值,这时候就需要用到插值算法 1.最邻近插值算法 首先假设原图是一个像素大小 ...

  4. 拉格朗日差值法----算法学习

    一.定义: 对某个多项式函数,已知有给定的k + 1个取值点: 其中对应着自变量的位置,而对应着函数在这个位置的取值. 假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多 ...

  5. 拉格朗日差值法python实现

    Lagrange插值法:Lagrange插值法:Lagrange插值法:给定一组点(x1,y1),(x2,y2)...(xn,yn)给定一组点 (x_{1},y_{1}),(x_{2},y_{2}). ...

  6. P5437-[XR-2]约定【拉格朗日差值,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/P5437 题目大意 nnn个点的完全图,连接i,ji,ji,j的边权值为(i+j)k(i+j)^k(i+j)k.随机 ...

  7. [51nod]1229 序列求和 V2(数学+拉格朗日差值)

    题面 传送门 题解 这种颓柿子的题我可能死活做不出来-- 首先\(r=0\)--算了不说了,\(r=1\)就是个裸的自然数幂次和直接爱怎么搞怎么搞了,所以以下都假设\(r>1\) 设 \[s_p ...

  8. 拉格朗日差值 - 杜教板子

    牛客网暑期ACM多校训练营(第一场) F Sum of Maximum 杜教板子: 证明https://blog.csdn.net/Lee_w_j__/article/details/81135539 ...

  9. 基于Seam+Carving和显著性分析的图像缩放方法MATLAB仿真

    本课题的主要工作是使用seam+carving算法对图像进行非等比例缩放以及无缝拼接,关于seam+caring算法的理论,这里不再重复,主要见如下的参考文献(已经提供). 下面介绍本系统的主要操作方 ...

  10. 基于MATLAB改进暗通道先验的图像去雾算法

    基于MATLAB改进暗通道先验的图像去雾算法 摘要:暗通道先验去雾算法求得的的透射率比较精细,去雾效果优于大多数去雾算法.然而在暗通道求取过程中,最小值滤波的处理会使得暗色向外扩张,导致透射率扩张变大 ...

最新文章

  1. 手握6亿把钥匙 能否打开“智能家居”的大门?
  2. html中的框架frameset和frame及iframe
  3. IDEA主题设置(字体颜色背景)
  4. 【渝粤教育】国家开放大学2018年秋季 0341-21T高级英语听力(2) 参考试题
  5. 【leetcode】ZigZag Conversion
  6. LeetCode872. Leaf-Similar Trees
  7. 关键时刻不可或缺的5款高科技紧急应用
  8. [转载]如何用C#语言构造蜘蛛程序
  9. httpd配置ResponseHeader
  10. Mac上安装homebrew(类似于Linux上的apt-get)
  11. cmd下载的python包,pycharm中却无法使用
  12. 高一下学期计算机,高一信息技术下学期教学计划
  13. 计算机c盘被保护怎么解开,电脑磁盘被写保护怎么办?总结几种去掉电脑磁盘写保护的方法...
  14. Swift 复数变量定义
  15. 这位智商奇高的超级天才去了:他简直活出了别人八辈子的精彩!
  16. mysql+纵表和横表_mysql 横表和纵表转换
  17. CPU个数、CPU核心数、CPU线程数
  18. oracle10g windows7
  19. 【去后厂村开游戏厅吧】基于pp-tinypose的体感贪吃蛇游戏
  20. 芯片的SD/MMC控制器以及SD卡介绍

热门文章

  1. 服务器如何挂网页游戏,网页游戏怎么挂云服务器
  2. C语言/C++常见习题问答集锦(十九)之C语言与漫天飞雪
  3. TP6 接口返回三要素
  4. 小细节见实力,告诉你vivo Z3如何成为爆款千元机
  5. macOS 10.10 u盘安装win7
  6. 【退役文】Always Challenge Miracle ---- 记我的ACM生涯
  7. Android强行进阶,自定义控件—LayoutManager,技术协会安卓部面试
  8. ASP.NET负压测试
  9. 知网研学打不开?一片空白怎么办?一步解决
  10. kettle发送邮件