实验内容:

用双线性内插法实现位深度为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——图像缩放(插值法)相关推荐

  1. Matlab图像的几何变换之图像缩放

    Matlab图像缩放 Matlab实现函数代码如下: clc I=rgb2gray(imread('Campus-scenery2sk.JPG')); figure,imshow(I); title( ...

  2. MATLAB图像平移、旋转、缩放、裁剪

    版本: MATLAB R2019a 目录 (一)图像平移 (二)图像旋转 1.图像尺寸不变 2.图像信息不丢失 (三)图像缩放 (四)图像裁剪 (一)图像平移 使用MATLAB自带函数 transla ...

  3. Matlab图像的平移,旋转,缩放,裁剪

    %%------------------------Matlab图像的平移,旋转,缩放,裁剪------------------------------- %-------------------头文 ...

  4. 图像缩放之最近领域插值法

    说到图像缩放,那是我们大家无所不会的神操作.因为目前各种移动设备都支持手动缩放.可是对于码农来说,不只是停留在缩放的表象,而是应该深入原理底部,了解缩放的原理. 缩放有两种类型:等比缩放和非等比缩放. ...

  5. 怎样用matlab实现图像的缩放,matlab实现图像缩放

    [实例简介]不调用方法,手动实现图像缩放 [实例截图] [核心代码] % MATLAB script for Assessment Item-1 % Task-1 clear; close all; ...

  6. 验证darknet中前处理做图像缩放(双线性内插值法)scale的算法效果

    关于图形scale原理的介绍可以参考下面的文章 用最近邻插值(Nearest Neighbor interpolation)进行图片缩放_papaofdoudou的博客-CSDN博客_最近邻插值算法原 ...

  7. matlab图像的错切变换,matlab 图像几何变换+答案

    实验四:图像几何变换(编程报告) 一.实验目的 (1)学习几种常见的图像几何变换,并通过实验体会几何变换的效果: (2)掌握图像平移.剪切.缩放.旋转.镜像.错切等几何变换的算法原理及编 程实现 (3 ...

  8. matlab 图像操作函数的详解

    转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...

  9. OpenCV 图像缩放

    缩放是对图像的大小进行调整,即使图像放大或缩小 cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) src : ...

最新文章

  1. wordpress主题
  2. 快手宣布 7 月将取消大小周,​互联网大厂不卷了?
  3. Storefront与NetScaler的集成配置 - part1
  4. 0909 初识操作系统
  5. 浏览器HTTP缓存机制
  6. Linux Priority VS Nice
  7. slimphp中间件调用流程的理解
  8. Jquery jqXHR对象的属性和方法
  9. Oracle Golden Gate概要
  10. 去认识一下WCDMA中的SCH信道
  11. Linux下学习进程控制
  12. 安卓Gallery配合ImageSwitcher不显示图片
  13. 最新emoji表情代码大全_8张最新创意好看的早上好表情图片大全 秋日温馨的早安祝福图片带字精选...
  14. error:control reaches end of non-void function [-Werror=return-type]
  15. js删除某个节点之后的所有节点
  16. AT24Cxx读写全面理解
  17. 计算机英语 自我介绍,计算机专业英文自我介绍
  18. 制作移动硬盘或U盘的MAC安装盘
  19. spring-boot整合druid配置
  20. H264--4--H264编码

热门文章

  1. 一训练就显存爆炸?Facebook 推出 8 比特优化器,两行代码拯救你的显存!
  2. NYU Google: 知识蒸馏无处不在,但它真的有用吗?
  3. 数据还是模型?人类知识在深度学习里还有用武之地吗?
  4. 去腾讯等BAT面试完的Mysql面试55题总结,含答案大赠送!
  5. 高并发编程系列:NIO、BIO、AIO的区别,及NIO的应用和框架选型
  6. 技术动态 | 针对复杂问题的知识图谱问答最新进展
  7. 基于时空相关属性模型的公交到站时间预测算法
  8. 弄懂goroutine调度原理
  9. 对接第三方支付接口-类似文件锁的编程小技巧
  10. netty客户端源码