《数字图像处理》实验之对图像进行双线性(bilinear)插值缩放

这篇具有很好参考价值的文章主要介绍了《数字图像处理》实验之对图像进行双线性(bilinear)插值缩放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 最近数字图像处理的实验课,老师让我们实现对图像进行双线性(bilinear)插值缩放,以下是原理和代码。

一、双线性插值缩放

1、图像几何变换的一般流程:

①确定变换后新图像的大小

②对新图像的每一个像素,确定其在旧图像坐标中的对应位置(逆变换)

③确定旧图像中该位置的像素值(nearest,bilinear,bicubic,...)

④将确定的像素值作为新图像的像素值

数字图像处理双线性插值例题,计算机视觉,深度学习

 数字图像处理双线性插值例题,计算机视觉,深度学习

 数字图像处理双线性插值例题,计算机视觉,深度学习

数字图像处理双线性插值例题,计算机视觉,深度学习

数字图像处理双线性插值例题,计算机视觉,深度学习

 数字图像处理双线性插值例题,计算机视觉,深度学习

 数字图像处理双线性插值例题,计算机视觉,深度学习

 数字图像处理双线性插值例题,计算机视觉,深度学习

由于该方法在水平、垂直两个方向上分别进行线性插值来得到最终结果,故称之为双线性插值法

总结:

数字图像处理双线性插值例题,计算机视觉,深度学习

二、不用 imresize , 利用循环自行编程将Lena图像以bilinear方式缩放p倍并显示。p是任一大于0的实数

%  Step1导入图像

img=imread('Lena.bmp');%导入lena图像
p=input('请输入缩放倍数(大于0的任意正实数):'); 

% Step2 通过原始图像和缩放因子得到新图像的大小,并创建新图像
[H,W,D]=size(img);%把二维矩阵当作第三维为D的三维矩阵。H是行数  W是列数
new_height=round(H*p);%算出缩放后的图像高度,最近取整
new_width=round(W*p);%算出缩放后的图像宽度,最近取整
new_img=zeros(new_height,new_width,D);%缩放之后新的矩阵大小

% Step3 扩展原始图像矩阵的边缘

img_scale=zeros(H+2,W+2,D);%将输入图像上下左右各加一列(行),这一步为了后面边缘像素的插值操作

% 为扩展而来的各边赋值。为解决边界溢出问题,扩大原图像的四边边缘,将原矩形赋值给新的矩形
img_scale(2:H+1, 2:W+1, :)=img;%  为四周各添加的一行或列做值的初始化
img_scale(1, 2:W+1, :)=img(1,:,:);%矩形上边界(行)
img_scale(H+2, 2:W+1,:)=img(H,:,:);%矩形下边界,从第二列,到W+1列,长度W
img_scale(2:H+1,1,:)=img(:,1,:);%矩形左边界(列),从第二行,到H+1行,长度H
img_scale(2:H+1,W+2,:)=img(:,W,:);%矩形右边界(列),从第二行,到H+1行,长度H

% 用原图的4个顶点为扩展而来的4个顶点赋值
img_scale(1,1,:)=img(1,1,:);
img_scale(1,W+2,:)=img(1,W,:);
img_scale(H+2,1,:)=img(H,1,:);
img_scale(H+2,W+2,:)=img(H,W,:);

%step4 新图的某个像素(i j)映射到原图(ox oy)上,并双线性插值算出新图该矩阵的灰度值

for j=1:new_height
    for i=1:new_width
        ox=(i-1)/p; oy=(j-1)/p;%用新的大图映射到小图的位置上
        x=floor(ox); y=floor(oy);% 原图坐标(ox,oy)不一定是整数,所以向下取整得到整数x,y
        
        %接下来带入公式即可
        u=ox-x;% 得到在原图中坐标的小数部分
        v=oy-y;
        x=x+1; y=y+1; %因为img_scale中多加了一行一列
        

%这个是公式,可以在书上找到
        new_img(i,j,:)=u*v*img_scale(x+1,y+1,:)+v*(1-u)*img_scale(x,y+1,:)+(1-v)*u*img_scale(x+1,y,:)+(1-u)*(1-v)*img_scale(x,y,:);
        
    end
end

new_img = uint8(new_img);
%输出原图和更改后的图
figure;imshow(img);
axis on %恢复对坐标轴的一切设置
title(['原图像(大小: ',num2str(H),'X',num2str(W),'X',num2str(D),')']);%num2str:将数字转换为字符数组
figure;imshow(new_img);
axis on
title(['缩放后的图像(大小: ',num2str(new_height),'X',num2str(new_width),'X',num2str(D),')']);

 效果图:

数字图像处理双线性插值例题,计算机视觉,深度学习

数字图像处理双线性插值例题,计算机视觉,深度学习

三、不用 imresize , 修改上述代码,编程将将任一灰度图像以bilinear方式行缩放p倍,列缩放q倍。p、q是任一大于0的实数

image_2 = input('请输入缩放图像名字(例如:Lena.bmp):','s');%导入图片的路径

%输入的数目必须是2的整数倍
p= input('请输入行缩放倍数(大于0的任意正实数):');
q= input('请输入列缩放倍数(大于0的任意正实数):');
image_original= imread(image_2); 

% Step2 通过原始图像和缩放因子得到新图像的大小,并创建新图像
[H,W,D]=size(image_original);%算出图像的大小,返回 image_original 的查询维度的长度。
new_height=round(H*p);%算出缩放后的图像高度,最近取整
new_width=round(W*q);%算出缩放后的图像宽度,最近取整
new_image2=zeros(new_height,new_width,D);%缩放之后新的矩阵大小


% 为扩展而来的各边赋值
img_scale(2:H+1, 2:W+1, :)=image_original;
img_scale(1, 2:W+1, :)=image_original(1,:,:);
img_scale(H+2, 2:W+1,:)=image_original(H,:,:);
img_scale(2:H+1,1,:)=image_original(:,1,:);
img_scale(2:H+1,W+2,:)=image_original(:,W,:);

% 用原图的4个顶点为扩展而来的4个顶点赋值
img_scale(1,1,:)=image_original(1,1,:);
img_scale(1,W+2,:)=image_original(1,W,:);
img_scale(H+2,1,:)=image_original(H,1,:);
img_scale(H+2,W+2,:)=image_original(H,W,:);

%step4 新图的某个像素(i j)映射到原图(ox oy)上,并双线性插值算出新图该矩阵的灰度

for j=1:new_height
    for i=1:new_width
        ox=(i-1)/p; oy=(j-1)/q;%用新的大图映射到小图的位置上
        x=floor(ox); y=floor(oy);% 原图坐标(ox,oy)不一定是整数,所以向下取整得到整数x,y
        
        %接下来带入公式即可
        u=ox-x;% 得到在原图中坐标的小数部分
        v=oy-y;
        x=x+1; y=y+1; %因为img_scale中多加了一行一列
        
        new_image2(i,j,:)=u*v*img_scale(x+1,y+1,:)+v*(1-u)*img_scale(x,y+1,:)+(1-v)*u*img_scale(x+1,y,:)+(1-u)*(1-v)*img_scale(x,y,:);
        
    end
end

new_image2 = uint8(new_image2);

%输出原图和更改后的图
figure;imshow(image_original);
axis on %恢复对坐标轴的一切设置
title(['原图像(大小: ',num2str(H),'X',num2str(W),'X',num2str(D),')']);%num2str:将数字转换为字符数组
figure;imshow(new_image2);
axis on
title(['缩放后的图像(大小: ',num2str(new_height),'X',num2str(new_width),'X',num2str(D),')']);

要在command window里面根据提示:输入缩放图像名字行、列缩放倍数

例如我输入的是Lena.bmp,2 ,2

效果图:

数字图像处理双线性插值例题,计算机视觉,深度学习

数字图像处理双线性插值例题,计算机视觉,深度学习

如果有错误的话,欢迎纠正
 文章来源地址https://www.toymoban.com/news/detail-733530.html

到了这里,关于《数字图像处理》实验之对图像进行双线性(bilinear)插值缩放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数字图像处理:实验三 图像增强

    图像增强是数字图像处理过程中常采用的一种方法。为了改善视觉效果或便于人和机器对图像的理解和分析,根据图像的特点或存在的问题采取的改善方法或加强特征的措施称为图像增强。图像增强处理是改变图像视觉效果的手段,增强后的图像便于对它的后续处理。图像增

    2024年02月04日
    浏览(46)
  • 数字图像处理报告:实验4 图像复原

    (四)实验4 图像复原 一、实验主题 学习图像复原的相关原理及实现方法,并掌握逆滤波、维纳滤波的原理与程序实现。 二、实验目的 1.掌握图像复原的基本原理和方法。 2.学习使用程序设计环境。 3.使用设计框架构造应用程序。 4.掌握逆滤波、维纳滤波的原理和实现

    2024年02月08日
    浏览(39)
  • 数字信号与图像处理实验三:图像处理基础与图像变换

    ​ 通过本实验加深对数字图像的理解,熟悉MATLAB中的有关函数;应用DCT对图像进行变换;熟悉图像常见的统计指标,实现图像几何变换的基本方法。 ​ 选择两幅图像,读入图像并显示,同时使用Matlab计算图像的大小,灰度平均值、协方差矩阵、灰度标准差和相关系数。 DC

    2024年02月04日
    浏览(57)
  • 数字图像处理实验之Matlab对图像的基本处理

    1、提取Lena图像的左半上角部分,与原始Lena图像在同一个figure中显示,并做适当命名 效果图 2、利用 imnoise , 对原始Lena图像叠加高斯噪声,产生4幅、14幅、140幅的含噪图像。对这些含噪图像采用 相加  运算,来验证、比较图像相加消除叠加性噪声的效果。将原始图像、1幅噪

    2024年02月03日
    浏览(57)
  • 数字图像处理实验报告

    目录 实验二、图像在空间域上的处理方法 实验三、图像在频率域上的处理方法 一、实验目的 了解图像亮(灰)度变换与空间滤波的意义和手段; 熟悉图像亮(灰)度变换与空间滤波的MATLAB函数和语法; 熟练掌握应用MATLAB软件编程进行图像亮(灰)度变换与空间滤波的方法

    2024年02月08日
    浏览(37)
  • 数字图像处理之matlab实验(五):形态学图像处理

    常见的形态学处理包括腐蚀、膨胀、开运算、闭运算。不同的操作有不同的作用,同样的操作在不同类型的图片上也有不同效果,具体效果如下表格所示。要求熟练掌握对二值图像的形态学处理。 不同操作对不同类型图像处理效果 一、对二值图像进行处理 1、结构元素 在开

    2024年02月04日
    浏览(60)
  • 【数字图像处理】实验三 图像分割(MATLAB实现)

    目录 一、实验意义及目的 二、实验内容 三、Matlab 相关函数介绍 四、算法原理 五、参考代码及扩展代码流程图 (1)参考代码流程图 (2)扩展代码流程图 六、参考代码 七、实验要求 (1)尝试不同的阈值选择方法,实现灰度图像二值化 (2)变换参数实现形态学滤波,查看滤波

    2024年02月05日
    浏览(48)
  • 【数字图像处理】实验二 图像增强(MATLAB实现)

    目录 一、实验意义及目的 二、实验内容 三、Matlab 相关函数介绍 四、算法原理 五、参考代码及扩展代码流程图  (1)参考代码流程图 (2)扩展代码流程图 六、参考代码 七、实验要求 (1)对以上处理变换参数,查看处理效果; (2)更改伪彩色增强方法为热金属编码或彩

    2023年04月12日
    浏览(80)
  • 【数字图像处理】实验(2)——图像增强(MATLAB实现)

    (1)进一步掌握图像处理工具Matlab,熟悉基于Matlab的图像处理函数。 (2)掌握各种图像增强方法。 1.打开一幅彩色图像Image1,使用Matlab图像处理函数,对其进行下列变换: (1)将Image1灰度化为gray,统计并显示其灰度直方图; (2)对gray进行分段线性变换; (3)对gray进行

    2023年04月23日
    浏览(54)
  • 数字图像处理大作业实验报告

         《数字图像处理》 期末大作业 班    级:数字媒体技术2020级1班 姓    名:快乐的小蓝 学    号:XXXXXXXXX XXXX大学信息学院 目录 一、任务描述 二、设计思路 三、功能模块 1 人脸定位 1.1 算法原理 1.检测最大连通域 2.基于肤色的检测 3.使用matlab自带的工具人脸识别

    2023年04月23日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包