文档章节

图像缩放--双线性插值

t
 tigerBin
发布于 2017/07/02 23:42
字数 427
阅读 118
收藏 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
【图像处理】图像灰度级减少, 图像缩放(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
OpenCV尺寸调整函数resize

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

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

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

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

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

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

没有更多内容

加载失败,请刷新页面

加载更多

Windows 10 设置 Java 环境变量

首先你需要在我的电脑中打开,找到环境变量属性。 找到环境变量属性 找到环境变量属性后单击将会看到下面的设置界面。 在这个界面中设置高级系统设置。 环境变量 在弹出的界面中选择设置环境...

honeymose
今天
1
0
用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
7
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
4
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部