图像缩放

双线性插值的理解

泄露秘密 提交于 2020-03-08 19:37:36
目的:在缩放算法中,完成目标图像的插值,本质是对图像信息的补充。 方法:将目标图像的坐标,通过缩放比映射到原图,然后根据邻近四点的像素值,依据线性权值完成最终的插值。 参考链接: https://blog.csdn.net/qq_37577735/article/details/80041586 来源: CSDN 作者: weixin_38410551 链接: https://blog.csdn.net/weixin_38410551/article/details/104736488

matlab 图像缩放 —— 最近邻插值 和 双线性插值

夙愿已清 提交于 2020-03-07 10:22:06
目录 一、插值与图像缩放 二、最近邻插值 1、原理 2、代码实现 三、双线性插值 1、原理 2、代码实现 一、插值与图像缩放   首先举个例子说明插值过程,先看看matlab的插值函数 interp() 吧: x = - 2 : 1 : 2 ; y = - 2 : 1 : 2 ; [ X , Y ] = meshgrid ( x , y ) ; Z = - X . ^ 2 - Y . ^ 2 ; p = - 2 : 0.33 : 2 ; q = - 2 : 0.33 : 2 ; [ P , Q ] = meshgrid ( p , q ) ; V1 = interp2 ( X , Y , Z , P , Q , 'nearest' ) ; % 最邻近插值 V2 = interp2 ( X , Y , Z , P , Q , 'linear' ) ; % 双线性插值 V3 = interp2 ( X , Y , Z , P , Q , 'spline' ) ; % 球面插值 figure subplot ( 221 ) surf ( X , Y , Z ) ; colormap ( 'autumn' ) title ( 'z = x^2 + y^2' ) subplot ( 222 ) surf ( P , Q , V1 ) ; colormap ( 'autumn' ) title

双线性插值算法进行图像缩放及性能效果优化

二次信任 提交于 2020-03-07 07:06:57
一)转自http://handspeaker.iteye.com/blog/1545126 最近在编程时用到了双线性插值算法,对图像进行缩放。网上有很多这方面的资料,介绍的也算明白。但是,这些文章只介绍了算法,并没有具体说怎么实现以及怎么实现最好,举个例子,你可以按照网上文章的算法自己写一个双线性插值程序,用它对一张图片进行处理,然后再用matlab或者openCV的resize函数对同一张图片进行处理,得到的结果是不一样的,如果源图片较小,效果差距就更大。以下是对于双线性插值的讲解以及上述现象的解释: 1.双线性插值 假设源图像大小为mxn,目标图像为axb。那么两幅图像的边长比分别为:m/a和n/b。注意,通常这个比例不是整数,编程存储的时候要用浮点型。目标图像的第(i,j)个像素点(i行j列)可以通过边长比对应回源图像。其对应坐标为(i*m/a,j*n/b)。 显然,这个对应坐标一般来说不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值(灰度值或者RGB值)。如果你的对应坐标是(2.5,4.5),那么最近的四个像素是(2,4)、(2,5)、(3,4),(3,5)。 若图像为灰度图像,那么(i,j)点的灰度值可以通过一下公式计算: f(i,j)=w1*p1+w2*p2+w3*p3+w4*p4; 其中,pi

图像缩放_OpenCv

巧了我就是萌 提交于 2020-03-06 11:46:35
图像缩放是一种比较简单的图像处理操作,这里给出opencv中的代码, opencv的版本C语言接口 int resize_c() { const char *pstrImageName = "lena.jpg"; const char *pstrSaveImageName = "lena缩放图.jpg"; const char *pstrWindowsSrcTitle = "原图"; const char *pstrWindowsDstTitle = "缩放图 "; double fScale = 0.8; //缩放倍数 CvSize czSize; //目标图像尺寸 //从文件中读取图像 IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED); IplImage *pDstImage = NULL; //计算目标图像大小 czSize.width = pSrcImage->width * fScale; czSize.height = pSrcImage->height * fScale; //创建图像并缩放 pDstImage = cvCreateImage(czSize, pSrcImage->depth, pSrcImage->nChannels); cvResize

OPENCV 图像缩放

浪子不回头ぞ 提交于 2020-03-06 11:46:20
工程下载地址 https://download.csdn.net/download/qq_16596909/11522434 opencv4 java netbeans开发,基于maven 可以按照倍率缩放,也可以指定分辨率缩放(可能会变形) 原图 0.5倍缩放 private void jBresizeActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: System.loadLibrary(Core.NATIVE_LIBRARY_NAME); org.opencv.core.Mat imgMat = imread("src\\resource\\" + jTFimgName.getText());//读取图片 float scale = 0.5f; float width = imgMat.width(); float height = imgMat.height(); org.opencv.core.Mat dst = new Mat(); Imgproc.resize(imgMat, dst, new Size(width * scale, height * scale)); Imgcodecs.imwrite("src\\resource\\0.5

OpenCV 金字塔图像缩放

守給你的承諾、 提交于 2020-03-06 11:46:04
// image_pyramid.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string> #include <iostream> using namespace std; #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <math.h> #include <stdlib.h> #include <stdio.h> #pragma comment(lib,"opencv_core2410d.lib") #pragma comment(lib,"opencv_highgui2410d.lib") #pragma comment(lib,"opencv_imgproc2410d.lib") using namespace cv; /// 全局变量 Mat src, dst, tmp; char* window_name = "Pyramids Demo"; /** * @函数 main */ int main( int argc, char** argv ) { /// 指示说明 printf( "\n Zoom In-Out demo \n " ); printf( "-------------

使用OpenCV对图像进行缩放

狂风中的少年 提交于 2020-03-06 11:44:37
OpenCV:图片缩放和图像金字塔 对图像进行缩放的最简单方法当然是调用resize函数啦! resize函数可以将源图像精确地转化为指定尺寸的目标图像。 要缩小图像,一般推荐使用CV_INETR_AREA来插值;若要放大图像,推荐使用CV_INTER_LINEAR。 现在说说调用方式 第一种,规定好你要图片的尺寸,就是你填入你要的图片的长和高。 #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; //图片的缩小与放大 int main() { Mat img = imread("lol5.jpg"); imshow("原始图", img); Mat dst = Mat::zeros(512, 512, CV_8UC3); //我要转化为512*512大小的 resize(img, dst, dst.size()); imshow("尺寸调整之后", dst); waitKey(0); } 第二种,填入你要缩小或者放大的比率。 #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using namespace std; using

python 简单图像处理(5) 缩放

雨燕双飞 提交于 2020-02-17 08:26:31
好啦,在这里我要介绍图像的缩放啦 图像比例缩放是指将给定的图像在x轴方向按比例缩放,在y轴方向也按比例缩放,从而获得一幅新的图像。 如果两个方向上缩放比例相等,则为全比例缩放,否则为非全比例缩放 比例缩放用矩阵形式可表示为 代数式为 我们先来看图像的比例缩小变换 介绍两种简单的缩小变换方法: 基于等间隔采样的图像缩小方法 基于局部均值的图像缩小方法 基于等间距采样的图像缩小方法的设计思路是,对画面像素均匀采样来保持所选像素仍旧可以保持图像的特征 说白了,就是选择一些点,舍弃一些点,用选择的点组成一幅图,使它和原图差不多 若比例因子为m和n,原图的矩阵为f[M×N],缩小后的矩阵为g[(M*m)×(N*n)] 由于原图像素点多,映射到g后会出现多点对一点的现象 所以我们从g映射到f, 则有g(i,j) = f(i/m,j/n) 我们可以很快写出测试程序: import cvdef Reduce(image,m,n): H = int(image.height*m) W = int(image.width*n) size = (W,H) iReduce = cv.CreateImage(size,image.depth,image.nChannels) for i in range(H): for j in range(W): x = int(i/m) y = int(j/n)

图像的旋转缩放平移变换公式

两盒软妹~` 提交于 2020-02-04 08:19:26
图像的旋转缩放平移变换公式 在前两天的应用中,用Flex简单写了一个拖动图片缩放的ObjectHandler控件,当时的功能还比较简单,只有缩放功能,不能平移和旋转。太不完整了! 平移还好,旋转一来,就有点头疼了。旋转必然要涉及旋转中心点的问题。一般的情况是缩放的中心点是图片左上角,旋转的中心点是图片的中心,如果用户每操作一次就要手动去改变一下中心点, 不仅逻辑上繁琐,也给调试带来很大的不便,最后不仅错在哪一步不知道,连怎么错的都不知道!!!。 那么,比较好的解决办法是,指定中心点center,给定平移量shift,缩放量scale,旋转量rotate,及图片的原始宽高size 即可保证图片正确显示。(图片默认缩放中心为左上角) 首先,这里我们需要几个简单的数学变换,主要针对缩放和旋转: OK,想清楚了变换的过程,下面的工作就更加简单了,套用一下公式就行: /** * transforms:{ * shift: {x:'', y:''} * rotate: '', * scale: '' * } * origin: { * originWidth:'', * originHeight: '', * originLeft: '', * originTop: '' * } * * */ private function fixTransformToCenter(center:Point

OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)

Deadly 提交于 2020-01-17 06:41:35
本文转载自: https://www.cnblogs.com/wangguchangqing/p/4045150.html 作者:wangguchangqing 转载请注明该声明。 在 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1) 主要介绍了图像变换中的向前映射、向后映射、处理变换过程中浮点坐标像素值的插值算法,并且基于 OpenCV2 实现了两个简单的几何变换:平移和镜像变换。本文主要稍微复杂点的两个几何变换:缩放和旋转。 1.图像缩放 图像的缩放主要用于改变图像的大小,缩放后图像的图像的宽度和高度会发生变化。水平缩放系数,控制图像宽度的缩放,其值为1,则图像的宽度不变;垂直缩放系数控制图像高度的缩放,其值为1,则图像的高度不变。如果水平缩放系数和垂直缩放系数不相等,那么缩放后图像的宽度和高度的比例会发生变化,会使图像变形。要保持图像宽度和高度的比例不发生变化,就需要水平缩放系数和垂直缩放系数相等。 左边的图像水平缩放系数和垂直缩放系数都是0.5;右边的图像的水平缩放系数为1,垂直缩放系数为0.5,缩放后图像宽度和高度比例发生变化,图像变形。 1.1 缩放原理 设水平缩放系数为sx,垂直缩放系数为sy,(x0,y0)为缩放前坐标,(x,y)为缩放后坐标,其缩放的坐标映射关系: 矩阵表示的形式为: 这是向前映射,在缩放的过程改变了图像的大小