Matlab——图像缩放(插值法)
实验内容:
用双线性内插法实现位深度为8的灰度图像的缩放。
思路:
输入原图像以及缩放后图像的像素要求(宽度*高度),处理后输出新图像。
我是用matlab来实现scale(input_img,scale_size)函数的,输入图像路径以及要求实现的宽度scale_w和高度值scale_h即可。通过matlab把原图像转化为img矩阵,这样矩阵img(a, b)元素的值就是原图像高度为a,宽度为b处的像素值。
设处理前后图像的宽度和高度分别为w、h,scale_w、scale_h。
如上图所示,row对应的是高度,设为x轴;col对应的是宽度,设为y轴;value对应的是灰度值,设为z轴。
通过缩放比例,可以求得新图像B在(i,j)处对应原图像的点为(x,y)(其中x= i*h/scale_h,y= j*w/scale_w)。
但是这两个值可能为浮点数,而像素中的位置是整数,所以这个点在原图像中对应的可能是“虚”点。所以,我们需
要根据找该“虚”点周围的四个点来进行双线性插值得到新图像的灰度值。我们应该取的是(x,y)邻近的四个像素
(x0,y0) 、(x0,y1) 、(x1,y0) 、(x1,y1),它们对应的灰度值为f(x0,y0) 、f(x0,y1)、 f(x1,y0)、 f(x1,y1)。
先对x方向进行插值,再对y方向进行插值,计算如下:
反过来,先对y方向:
显然,邻近像素的x1-x0 = y1-y0 = 1
整理式子得到:
这里u、v分别是x、y的小数部分,即u = x - x0; v = y - y0
要注意的是:上述公式img(a,b)中的a和b不能小于1,所以当x和y小于1时需要将其重新赋值为1。
代码:
function output_img = scale(input_img, scale_size)
%Input - input_img is a two-dimensional matrices storing image
% - scale_size is a tuple of [width, height] defining the spatial resolution of output
%Output - output_img is the same as input_imgimg = imread(input_img); %读取输入图片的数据
[h,w] = size(img); %获取行和列,即原图的高度和宽度scale_w = scale_size(1); %根据输入获得缩放后的新宽度
scale_h = scale_size(2); %根据输入获得缩放后的新高度
output_img = zeros(scale_h, scale_w); %初始化for i = 1 : scale_h %缩放后的图像的(i,j)位置对应原图的(x,y)for j = 1 : scale_wx = i * h / scale_h;y = j * w / scale_w;u = x - floor(x);v = y - floor(y); %取小数部分if x < 1 %边界处理x = 1;endif y < 1y = 1;end%用原图的四个真实像素点来双线性插值获得“虚”像素的像素值output_img(i, j) = img(floor(x), floor(y)) * (1-u) * (1-v) + ...img(floor(x), ceil(y)) * (1-u) * v + ...img(ceil(x), floor(y)) * u * (1-v) + ...img(ceil(x), ceil(y)) * u * v;end
endimwrite(uint8(output_img), '../output_img.png'); %保存处理后的图像
imshow(input_img); %显示原图
figure,imshow(uint8(output_img)) %显示处理后的图像
运行时若图片在代码上一级目录,则输入scale('../a.png', [450,300]);
效果图:
原图为384*256:
缩小成192*128:
放大成450*300:
缩放成500*200:
//
转载:https://blog.csdn.net/Stella_Chan/article/details/78025020?locationNum=5&fps=1
Matlab——图像缩放(插值法)相关推荐
- Matlab图像的几何变换之图像缩放
Matlab图像缩放 Matlab实现函数代码如下: clc I=rgb2gray(imread('Campus-scenery2sk.JPG')); figure,imshow(I); title( ...
- MATLAB图像平移、旋转、缩放、裁剪
版本: MATLAB R2019a 目录 (一)图像平移 (二)图像旋转 1.图像尺寸不变 2.图像信息不丢失 (三)图像缩放 (四)图像裁剪 (一)图像平移 使用MATLAB自带函数 transla ...
- Matlab图像的平移,旋转,缩放,裁剪
%%------------------------Matlab图像的平移,旋转,缩放,裁剪------------------------------- %-------------------头文 ...
- 图像缩放之最近领域插值法
说到图像缩放,那是我们大家无所不会的神操作.因为目前各种移动设备都支持手动缩放.可是对于码农来说,不只是停留在缩放的表象,而是应该深入原理底部,了解缩放的原理. 缩放有两种类型:等比缩放和非等比缩放. ...
- 怎样用matlab实现图像的缩放,matlab实现图像缩放
[实例简介]不调用方法,手动实现图像缩放 [实例截图] [核心代码] % MATLAB script for Assessment Item-1 % Task-1 clear; close all; ...
- 验证darknet中前处理做图像缩放(双线性内插值法)scale的算法效果
关于图形scale原理的介绍可以参考下面的文章 用最近邻插值(Nearest Neighbor interpolation)进行图片缩放_papaofdoudou的博客-CSDN博客_最近邻插值算法原 ...
- matlab图像的错切变换,matlab 图像几何变换+答案
实验四:图像几何变换(编程报告) 一.实验目的 (1)学习几种常见的图像几何变换,并通过实验体会几何变换的效果: (2)掌握图像平移.剪切.缩放.旋转.镜像.错切等几何变换的算法原理及编 程实现 (3 ...
- matlab 图像操作函数的详解
转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...
- OpenCV 图像缩放
缩放是对图像的大小进行调整,即使图像放大或缩小 cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) src : ...
最新文章
- wordpress主题
- 快手宣布 7 月将取消大小周,​互联网大厂不卷了?
- Storefront与NetScaler的集成配置 - part1
- 0909 初识操作系统
- 浏览器HTTP缓存机制
- Linux Priority VS Nice
- slimphp中间件调用流程的理解
- Jquery jqXHR对象的属性和方法
- Oracle Golden Gate概要
- 去认识一下WCDMA中的SCH信道
- Linux下学习进程控制
- 安卓Gallery配合ImageSwitcher不显示图片
- 最新emoji表情代码大全_8张最新创意好看的早上好表情图片大全 秋日温馨的早安祝福图片带字精选...
- error:control reaches end of non-void function [-Werror=return-type]
- js删除某个节点之后的所有节点
- AT24Cxx读写全面理解
- 计算机英语 自我介绍,计算机专业英文自我介绍
- 制作移动硬盘或U盘的MAC安装盘
- spring-boot整合druid配置
- H264--4--H264编码