文档章节

图像缩放--双线性插值

t
 tigerBin
发布于 2017/07/02 23:42
字数 427
阅读 74
收藏 0

双线性插值:https://en.wikipedia.org/wiki/Bilinear_interpolation

(i,j)表示 destination 目标图片中的像素点, P(x0, y0) 表示 source源图像中的像素点

P(i, j)就是要求的像素点

1.首先,计算 水平压缩因子与垂直压缩因子,

double horFactor = srcWidth / dstWidth,

double verFactor = srcHeight / dstHeight

2. 计算 P(x0, y0)

double x0 = i * horFactor

double y0 = j * verFactor

3. 计算 Source中 距离P(x0, y0)最近的四个像素点的坐标(x1, y1), (x1, y2), (x2, y1), (x2, y2)

x1  =int(x0)
x2 = x1 + 1
y1 = int(y0)
y2 = y1 + 1

4.计算权值 

5.利用公式求解 P(i,j)

6. Source Code

uint8_t  *Scale(uint8_t *src, int srcWidth, int srcHeight, int dstWidth, int dstHeight)
{
	uint8_t *buf = new uint8_t[dstWidth * dstHeight * 3];

	double horFactor = double(srcWidth) / dstWidth;  //水平缩放因子
	double verFactor = double(srcHeight) / dstHeight; //垂直缩放因子

	double w0, w1, w2, w3; // weight
	int x1, y1, x2, y2; // (x1, y1), (x2, y2)
	double fx1, fx2, fy1, fy2;

	for (int i = 0; i < dstHeight; i++)
	{
		double x0 = i * verFactor;
		x1 = int(i * verFactor);
		x2 = x1 + 1;

		fx1 = x2 - x0;
		fx2 = x0 - x1;
		for (int j = 0; j < dstWidth; j++)
		{
			double y0 = j * horFactor;
			y1 = int(j * horFactor);
			y2 = y1 + 1;

			fy1 = y2 - y0;
			fy2 = y0 - y1;

			// 计算权值
			w0 = fx1 * fy1;
			w1 = fx1 * fy2;
			w2 = fx2 * fy1;
			w3 = fx2 * fy2;

			int dstOffset = (i * dstWidth + j) * 3;
			int srcOffset1 = (x1 * srcWidth + y1) * 3;
			int srcOffset2 = (x2 * srcWidth + y1) * 3;

			buf[dstOffset + 0] = w0 * src[srcOffset1] + w1 * src[srcOffset1 + 3] + w2 * src[srcOffset2] + w3 * src[srcOffset2 + 3];     //B
			buf[dstOffset + 1] = w0 * src[srcOffset1+1] + w1 * src[srcOffset1 + 4] + w2 * src[srcOffset2+1] + w3 * src[srcOffset2 + 4]; //G
			buf[dstOffset + 2] = w0 * src[srcOffset1+2] + w1 * src[srcOffset1 + 5] + w2 * src[srcOffset2+2] + w3 * src[srcOffset2 + 5]; //R
		}
	}

	return buf;
}

运行示例:

int main(int argc, char *argv[])
{

	JpegDecoder decoder("02.jpg");
	auto &img = decoder.Decoder();

	uint8_t *scale = Scale(img.Data, img.Width, img.Height, img.Width / 2, img.Height / 2);

	cv::Mat src, dst;
	src.create(img.Height, img.Width, CV_8UC3);
	dst.create(img.Height / 2, img.Width / 2, CV_8UC3);

	src.data = img.Data;
	dst.data = scale;

	cv::imshow("src", src);
	cv::imshow("dst", dst);

	cvWaitKey();
	return 0;
}

JpegDecoder: https://git.oschina.net/SilentCode/tinyjepgdecoder

© 著作权归作者所有

共有 人打赏支持
t
粉丝 0
博文 65
码字总数 17440
作品 0
武汉
程序员
常用的像素操作算法:Resize、Flip、Rotate

Resize 图像缩放是把原图像按照目标尺寸放大或者缩小,是图像处理的一种。 图像缩放有多种算法。最为简单的是最临近插值算法,它是根据原图像和目标图像的尺寸,计算缩放的比例,然后根据缩放...

fengzhizi715
2017/12/14
0
0
OpenCV尺寸调整函数resize

src:输入,原图像,即待改变大小的图像; dst:输出,改变大小之后的图像,这个图像和原图像具有相同的内容,只是大小和原图像不一样而已; dsize:输出图像的大小。如果这个参数不为0,那么...

OceanStar
08/30
0
0
【图像处理】图像灰度级减少, 图像缩放(Reducing the Number of Gray Levels, Zooming and Shrinking)

实验要求 (1.a) 编写一个以2 的幂次方将给定图像的灰度级数从256 减少到2 的程序。图像的灰度级数以参数变量的形式传递到所编写的程序中。 (1.b) 使用图2.21(a) 以(1.a)中编写的程序生成图2...

u013165921
01/14
0
0
5- OpenCV+TensorFlow 入门人工智能图像处理-图片的几何变换(一)

图片的几何变换 图片的几何变换章节介绍 图片位移 & 图片缩放 图片剪切 & 图片镜像 图片仿射变换 Hog + Svm 小狮子识别 计算机视觉的基础: 裁剪样本为64,128 等比例缩放 仿射变换: 位移,旋转...

天涯明月笙
04/19
0
0
【图像缩放】双立方(三次)卷积插值

前言 图像处理中有三种常用的插值算法: 最邻近插值 双线性插值 双立方(三次卷积)插值 其中效果最好的是,本文介绍它的原理以及使用 如果想先看效果和源码,可以拉到最底部 本文的契机是某...

撒网要见鱼
2017/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bytom资产发行与部署合约教程

比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 发行资产 在比原链上发行资产比较方便快捷,使用节点的dashboard图形界面...

比原链Bytom
10分钟前
0
0
Ext ComboBox 实现下拉多选,全选,反选

Ext ComboBox下拉选中-全选反选逻辑处理 Ext ComboBox 实现下拉多选,全选,反选 方法一: 代码 var me = this;var isMultiSelect = true;//是否设置为下拉多选me.selectValues = [];//保存...

javaART
13分钟前
0
0
Swoole Windows 版(4.2.1)

https://pan.baidu.com/s/1uTm77_cp4kn0_xMgO1DpIw Swoole Windows 版(内部版本,swoole-4.2.1,php-7.1,必须为64位系统,Win7或更高版本)。 解压后,将 $dir/bin 目录,设置到 系统的环境...

老查
16分钟前
0
0
美团点评上市受追捧,成中国第四大互联网企业

从建立到上市,蔚来用了不到4年,拼多多3年,趣头条更是仅用了2年3个月。在这波中概股上市浪潮中,等待了漫长8年的美团点评也终于迎来登陆资本市场的时刻。20日上午,美团创始人兼CEO王兴终于...

Mr_zebra
17分钟前
0
0
Mysql-mybatis批量插入

话不多说直接上代码吧 <insert id="batchSave" >insert into table_name (`name`,age)values<foreach collection="list" index="index" item="item" open="(" separator="," close=......

落叶清风
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部