《数字图像处理》实验之对图像进行双线性(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模板网!

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

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

相关文章

  • 数字图像处理实验四--图像变换

    (图像变换) 实验内容: 对图像lena、cameraman和face进行傅里叶变换,观察图像能量在频谱图中的分布情况。 利用Matlab生成下列图像,并对其进行旋转30度、90度和120度,然后对他们分别进行傅里叶变换。 对图像lena、cameraman和face用DCT变换进行图像压缩,舍掉的变换系数分别小

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2023年04月23日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包