当前位置: 首页 > news >正文

《数字图像处理基础》学习07-图像几何变换之最近邻插值法放大图像

目录

一,概念

二,题目及matlab实现

1,解题思路

2,matlab实现 

1)matlab思路

2)完整代码

三,放大图像及matlab实现 


一,概念

通过上一篇,我已经学习了使用最邻近插值法来缩小图像

《数字图像处理基础》学习06-图像几何变换之最邻近插值法缩小图像-CSDN博客

依旧需要使用到如下公式(因为在上一篇文章已经学习过,所以这里不赘诉):

g(i,j)=f(i\times \Delta i,j \times \Delta j)

和使用最邻近插值法缩小图像不同。如果要使用最邻近插值法放大图像,则需要将原始图像的每行 i 和每列 j 都乘上对应的放大倍数  k ,得到原始图像中像素值的像素点(即像素值的坐标)的最大分布。

例如,有一个原始图像矩阵 f 尺寸大小为 M\times N,将其放大 k1 \times k2 倍 ,可得到尺寸大小为 k1 \cdot M\times k2 \cdot N 的放大图像矩阵 g

接着将原始图像矩阵的第一个元素的坐标(i,j),分别乘上对应的放大倍数(如果是非等比例放大则k有两个不同的取值:k1 和 k2 ),此时原始图像第 1 行第 1 列的像素值会跑到放大图像的第

1 \times k1 行第1 \times k2 列,并且放大图像从  1 \rightarrow 1 \times k1 行 及1 \rightarrow 1 \times k2 列之间的像素值都用原始图像的第 1 行第 1 列的像素值来填充。如果放大倍数是小数,则计算后按照四舍五入法取值。接下来可以通过题目来加深使用最邻近插值法放大图像的具体过程。

二,题目及matlab实现

下面是一个简单的例子。给出一个原始图像矩阵 f  大小为 3\times 3 

f=\begin{bmatrix} 1 & 4&7 \\ 2& 5 & 8\\ 3& 6 &9 \end{bmatrix}

将其放大:

  1. 高(行)放大的倍数为 k1=1.2
  2. 宽(列)的放大倍数为 k2=2.5 

求对其放大后的图像矩阵 g

% 可以试着先自己做一做,如果解出来的g如下:

g=\begin{bmatrix} 1 & 1 & 1 & 4 & 4 & 7 & 7 & 7 \\ 2 & 2 & 2 & 5 & 5& 8 & 8 & 8 \\ 3 & 3 & 3 & 6 & 6 & 9 & 9 & 9 \\ 3 & 3 & 3 & 6 & 6 & 9 & 9 & 9 \\ \end{bmatrix}

则思路正确,直接用自己的思路编写matlab程序去处理读取的图像,下面的解题思路可以选择跳过。

1,解题思路

从之前的概念中就已经可以用手算出g。

例如:

  1. 首先根据放大原始图像 f 的行列倍数创建一个放大后的图像矩阵 g 

  2. 原始图像 f 第 1 行第 1 列的像素值会跑到放大图像 g 的第 1 行第1 \times k2=1 \times 2.5 \approx3 列,并且放大图像 g 从  1 \rightarrow 1 行 及1 \rightarrow3 列之间的像素值都用原始图像 f 的第 1 行第 1 列的像素值来填充,如下👇

  3. 原始图像 f 第 1 行第 2 列的像素值会跑到放大图像 g 的第 1 行第5 列,并且放大图像 g 从  1 \rightarrow 1 行 及4 \rightarrow5 列之间的像素值都用原始图像的第 1 行第 2 列的像素值来填充,如下👇

    可以看到,填充 g 时的起始位置跟上一次的填充的列结束位置有关,例如,上一次的填充在 j=3 结束,那么这一次的填充从 j+1=4 开始,一直填充到 j=5 为止。原始图像 f 第 1 行第 3 列的像素值操作一样。

  4. 原始图像 f 第 2 行第 1 列的像素值会跑到放大图像 g 的第 2 行第3 列,并且放大图像 g 从  2 \rightarrow 2 行 及1 \rightarrow3 列之间的像素值都用原始图像的第 2 行第 1 列的像素值来填充,如下👇

    可以看到,填充 g 时的起始位置跟上一次的填充的行结束位置有关,例如,上一次的填充在 i=1 结束,那么这一次的填充从 i+1=2 开始,一直填充到 i=2 \times 1.2=2.4 \approx 2  为止。

  5. 后面的操作类似,这里不赘诉,最后得到的放大矩阵g如下👇

2,matlab实现 

1)matlab思路

在通过解题思路中,可以看到在填充过程中,不变的是原始图像矩阵中的每一个像素放大后的对应像素点(像素的坐标,i,j),因此, 读取图像形成矩阵 f 和产生全零的放大矩阵 g 之后,可以先将原始图像矩阵的每一行每一列放大后在放大图像矩阵中的位置分别用数组存储起来:

  • 数组 ia ,存储原始图像矩阵的每一行放大后在放大图像矩阵中的最大位置。
  • 数组 ja,存储原始图像矩阵的每一列放大后在放大图像矩阵中的最大位置。

虽然matlab在声明一维数组时可以不用声明一维数组的类型及指定一维数组的大小,但至少得有一个数组元素。例如,ia=[1];  % 数组ia中有一个元素 1

 于是,需要在matlab中写下如下语句,创建数组ia和数组ja:

ia=[1];  %之所以给定元素1,是因为在matlab中索引是从1开始,不管是遍历原始图像矩阵的行列,还是填充放大图像矩阵的行列,它们的第一个元素的行都是从1开始,列也是从1开始,即第一个元素的坐标为(1,1)
ja=[1];
for i=1:h  % 原始图像的高(行数)ia(end+1)=round(i*k1)+1;  % 创建存储原始图像矩阵的每一行放大后在放大图像矩阵中的最大位置的数组
% ia(end+1)可以在数组ia的已有元素末尾添加新的数组元素
end
for j=1:w % 原始图像的宽(列数)ja(end+1)=round(j*k2)+1;  % 创建存储原始图像矩阵的每一列放大后在放大图像矩阵中的最大位置的数组
end

 上述创建数组的代码也可以简化成如下形式(如果后面嵌套多的话就需要用到简化)👇:

ia = round((0:h) * k1) + 1;  
% 之所以要加1,是因为原始图像矩阵在当前行或列在放大时,得到的就是在放大图像矩阵中的最大位置
% 而下一个填充的行或列的填充位置需要上一个位置加1,为了方便起见,都将结果加1,之后遍历的时候再进行相应的处理。
ja = round((0:w) * k2) + 1;

接下来就开始遍历原始图像矩阵,为了后期让这个代码也可以应用到图像处理中,因此,还需要加上用来遍历像素值的颜色通道变量 c(在获取原始图像矩阵 f 时,获取到该图像的颜色通道数dim,之后在创建放大图像矩阵 g 时,也需要传入颜色通道数 dim)。像给出的题目中的图像矩阵 f 很简单,所以也不包含颜色,不是彩色图像,因此,是灰度图像,它的颜色通道数 dim=1

我通过最邻近插值法的相关概念和解题思路,可以知道,放大图像被填充的像素值与上一次的填充有关,而相关的坐标已经用数组 ia 和 ja 存储:

  1. 例如:原始图像 f 只有两行,所产生的数组ia只有3个元素:1;1*k1+1;2*k1+1。数组ja也只有三个元素:1;1*k2+1;2*k2+1。
  2. 如果想要遍历整个数组ia,只需要循环两次就行,因为通过观察,可以发现遍历数组ia 和 ja 的循环次数分别与原始图像矩阵的行数和列数一样。
  3. 我一般喜欢按照将变量名命名成与之相关的其它变量。例如,如果想要遍历原始图像 f 的行 h ,我就会用 fi 表示原始图像 f 的每一行。fj 表示原始图像 f 的每一列。
  4. 在填充的过程中,放大图像 g 的像素值的行 gi 和列 gj 都会变化:起始位置对应数组的当前元素,结束位置为对应数组的下一个元素的值减一。
    【可以自己选择带入个别的值来验证】

根据上述写出的代码如下👇

for c=1:dimfor fi=1:hfor fj=1:wfor gi=ia(fi):ia(fi+1)-1for gj=ja(fj):ja(fj+1)-1g(gi,gj,c)=f(i,j,c);endendendend
end

由于嵌套过多,会导致运算出现问题,因此,可以将最里面的两个循环语句简化,如下:

for c = 1:dimfor fi = 1:hfor fj = 1:wg(ia(fi):(ia(fi+1)-1), ja(fj):(ja(fj+1)-1), c) = f(fi,fj,c);endend
end

2)完整代码

clear all; clear; clc;% 清空工作空间
f = [1, 4, 7; 2, 5, 8; 3, 6, 9];   
[h,w,dim] = size(f);
k1 = 1.2;  
k2 = 2.5;
nh = round(k1 * h);
nw = round(k2 * w);  
g = zeros(nh, nw, dim, 'uint8'); 
ia = round((0:h) * k1) + 1;
ja = round((0:w) * k2) + 1;
for c = 1:dimfor fi = 1:hfor fj = 1:wg(ia(fi):(ia(fi+1)-1), ja(fj):(ja(fj+1)-1), c) = f(fi,fj,c);endend
end
% 显示结果
disp('输入矩阵 f:');
disp(f); 
disp('输出矩阵 g:');
disp(g);

运行后的结果和之前通过做题得到的结果一样:

三,放大图像及matlab实现 

clear all; clear; clc; % 清空工作空间
f = imread('01.jpg');  
[h,w,dim] = size(f);
k1 = 1.2;  
k2 = 2.5;
nh = round(k1 * h);
nw = round(k2 * w);  
g = zeros(nh, nw, dim, 'uint8'); 
ia = round((0:h) * k1) + 1;
ja = round((0:w) * k2) + 1;for c = 1:dimfor fi = 1:hfor fj = 1:wfv = f(fi, fj, c);g(ia(fi):(ia(fi+1)-1), ja(fj):(ja(fj+1)-1), c) = fv;endend
end
disp('图像处理完成。');
figure;
subplot(121);
imshow(f);
title(['分辨率为:', num2str(size(f, 1)), '×', num2str(size(f, 2)), '的原图像']);
subplot(122);
imshow(g);
title(['分辨率为:', num2str(size(g, 1)), '×', num2str(size(g, 2)), '的放大图像']);
imwrite(g, 'D:\myMatlab\img\01near_increase.jpg');

如果想要等比例放大图像,可以将放大倍数k1和k2设置一样的数值。如下就是等比例放大6倍的图像👇 

一般来说,很少用最邻近插值法来放大图像,基本使用的时双线性插值法来放大图像,之所以我要写这篇文章,主要是因为刚刚好学了,想着雁过留痕,就将自己的学习记录下来,往后还可以再看看。

如果有兴趣的话,可以关注专栏,之后会持续更新有关数字图像处理相关的内容及知识点。

如下就是双线性插值法的核心图:通过邻近四点,求得缩放图像的 像素值 g(i,j) 👇

如果对文章的内容有问题或者是有更好的建议请在评论区留言或者是私信我,回复时间不超过一天。  

相关文章:

《数字图像处理基础》学习07-图像几何变换之最近邻插值法放大图像

目录 一,概念 二,题目及matlab实现 1,解题思路 2,matlab实现 1)matlab思路 2)完整代码 三,放大图像及matlab实现 一,概念 通过上一篇,我已经学习了使用最邻近插…...

pip安装库时报错(请求超时)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

XPath表达式详解及其在Web开发中的应用

XPath(XML Path Language)是一种强大的查询语言,用于在XML文档中选择节点。由于HTML可以被视为一种特殊的XML,因此XPath同样适用于HTML文档。XPath允许开发者通过元素的层级结构和属性来选择节点或节点集合,这使得它成…...

Qt中Socket网络编程

文章目录 Qt中Socket网络编程服务器端客户端 Qt中Socket网络编程 这里就拿b站上爱编程的小丙的demo来做总结吧,首先要感谢成功带我入门的人:爱编程的小丙和程序员长风,这两个人是讲Socket编程我听懂的课555,接下来就总结一下Qt中…...

【05】Selenium+Python 两种文件上传方式(AutoIt)

上传文件的两种方式 一、input标签上传文件 可以用send_keys方法直接上传文件 示例代码 input标签上传文件import time from selenium import webdriver from chromedriver_py import binary_path # this will get you the path variable from selenium.webdriver.common.by i…...

Python网络编程

网络编程 Socket(套接字) socket 位于 网络协议中的 数据传输层、 该层 主要 可以通过 UDP 或者 TCP协议 实现 数据的传输 TCP 协议 VS UDP协议 tcp : 是一个 可靠的 ,面向 连接的协议。 数据在网络传输中 是安全的,不易丢失的。 TCP连接 在建立的时候&…...

openssl生成ca证书

常见CA文件夹 1、生成CA钥匙 openssl genrsa -out ./private/cakey.pem 2、生成CA自签名 openssl req -new -x509 -key ./private/cakey.pem -out ./cacert.crt -days 3650 3、生成http服务器私钥 openssl genrsa -out ./data/frontt.project.com.key 2048 4、CA给http服务器…...

Oracle RAC 环境下数据文件误建在本地目录的处理过程

问题描述 在 Oracle RAC 环境中,有时会误将数据文件创建在本地目录,导致其他节点无法访问该数据文件,从而报出 ORA-01157 和 ORA-01110 错误。 问题分析 错误日志 Mon Nov 16 19:02:38 2021 Errors in file /u01/app/oracle/diag/rdbms/orc…...

新质驱动·科东软件受邀出席2024智能网联+低空经济暨第二届湾区汽车T9+N闭门会议

为推进广东省加快发展新质生产力,贯彻落实“百县千镇万村高质量发展工程”,推动韶关市新丰县智能网联新能源汽车、低空经济与数字技术的创新与发展,充分发挥湾区汽车产业链头部企业的带动作用。韶关市指导、珠三角湾区智能网联新能源汽车产业…...

windows11 使用体验记录

好的地方: UI上字体风格貌似更好看了,文件夹增加了多个标签,类似于浏览器既可以打开多个窗口,也可以在同一个窗口中打开多个标签页 不好的地方: 桌面右下角点击日期时间,显示日期,时间呢&…...

202页MES项目需求方案深入解读,学习MES系统设计规划

202页MES项目需求方案深入解读,学习MES系统设计规划 MES项目需求方案旨在实现制造执行、效率提升、精细化管理等多个方面的功能。整体结构分为七大部分,包括制造执行、效率、精细化、品质在线、设备、用户思想和数据互联。制造执行部分关注订单、品质数据…...

前端css实例

前端css实例 一、带条纹的表格 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>条纹样式的表格<…...

YOLO的框架及版本迭代

YOLO&#xff08;You Only Look Once&#xff09;是一种非常流行的实时目标检测算法&#xff0c;其特点是将目标检测任务转换为一个回归问题&#xff0c;通过一次前向传播就可以同时完成目标的分类和定位。以下是YOLO框架的整体架构和工作原理&#xff1a; 一、YOLO的基本框架…...

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕 设置使用下载地址 设置 使用 下载地址 https://www.videohelp.com/software/PotPlayer...

JavaScript零基础入门速通(中)

目录 1. 函数 1.1 函数声明 1.2 返回值 1.3 匿名函数 1.4 箭头函数 2. 对象 2.1 创建对象 2.2 访问和修改对象的属性 2.3 对象方法 3. 数组 3.1 创建数组 3.2 数组方法 3.3 遍历数组 4. 作用域 4.1 全局作用域 4.2 局部作用域 4.3 块级作用域 5. 事件处理 5…...

【Yarn Bug】 yarn 安装依赖出现的网络连接问题

最近&#xff0c;在初始化 Ant Design Pro 前端脚手架过程中&#xff0c;使用 yarn 安装依赖时遇到了网络连接问题&#xff0c;具体错误信息提示为 info There appears to be trouble with your network connection. Retrying...。通过百度查询&#xff0c;得知出现这种问题的原…...

字节青训Marscode_5:寻找最大葫芦——最新题解

步骤1&#xff1a;问题定义与分析 输入条件&#xff1a; 整数n&#xff1a;牌的数量整数max&#xff1a;葫芦牌面值之和的上限数组array&#xff1a;n张牌的牌面值 输出条件&#xff1a; 两个整数组成的数组[a,b]&#xff1a; a表示三张相同牌的牌面值b表示两张相同牌的牌面值如…...

MySQL —— MySQL 程序

目录 前言 一、MySQL 程序简介 二、mysqld -- MySQL 服务器 三、mysql -- MySQL 客户端 1. mysql 客户端简介 2. mysql 客户端选项 &#xff08;1&#xff09;指定选项的方式 &#xff08;2&#xff09;mysql 客户端命令常用选项 &#xff08;3&#xff09;在命令行中使…...

LLamafactory API部署与使用异步方式 API 调用优化大模型推理效率

文章目录 背景介绍第三方大模型API 介绍LLamafactory 部署API大模型 API 调用工具类项目开源 背景介绍 第三方大模型API 目前&#xff0c;市面上有许多第三方大模型 API 服务提供商&#xff0c;通过 API 接口向用户提供多样化的服务。这些平台不仅能提供更多类别和类型的模型…...

不玩PS抠图了,改玩Python抠图

网上找了两个苏轼的印章图片&#xff1a; 把这两个印章抠出来的话&#xff0c;对于不少PS高手来说是相当容易&#xff0c;但是要去掉其中的水印&#xff0c;可能要用仿制图章慢慢描绘&#xff0c;图章的边缘也要慢慢勾画或者用通道抠图之类来处理&#xff0c;而且印章的红色也不…...

三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)

>本文收集关于透明对象渲染技术中关于OIT技术的资料&#xff0c;尝试用简单的逻辑对这些内容进行整理。 1、透明对象的特殊对待 不要小瞧png图片和jpg图片的差异&#xff01;在一般的三维平台&#xff0c;png代表的是带透明通道的纹理&#xff0c;而jpg代表的是不带透明的…...

Linux零基础入门--Makefile和make--纯干货无废话!!

目录 Makefile的概念与使用 Makefile的编写 多个源文件的Makefile编写 Makefile的概念与使用 Makefile其实是linux中的一种包含构建指令的文件&#xff0c;用于自动化构建 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefi…...

vim编辑器的一些配置和快捷键

记录vim编辑器的一些配置和快捷键&#xff0c;边学边用&#xff1a; yy 复制dd 删除p&#xff1a;粘贴ctrly 取消撤销u&#xff1a;撤销:w 写入:q 退出a/i 插入O: 上方插入一个空行o&#xff1a;下方插入一个空行:e 打开文件编辑 其他配置&#xff1a; 上移一行和下移一行&a…...

电子应用设计方案-31:智能AI音响系统方案设计

智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备&#xff0c;通过融合语音识别、自然语言处理、音频播放等技术&#xff0c;为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…...

【设计模式】【结构型模式(Structural Patterns)】之装饰模式(Decorator Pattern)

1. 设计模式原理说明 装饰模式&#xff08;Decorator Pattern&#xff09; 是一种结构型设计模式&#xff0c;它允许在不改变对象接口的前提下&#xff0c;动态地给对象增加额外的责任或功能。这种模式创建了一个装饰类&#xff0c;用于包装原有的类&#xff0c;并在保持类方法…...

【AI】JetsonNano启动时报错:soctherm OC ALARM

1、问题描述 将JetsonNano烧写SD卡镜像为Ubuntu20.04后&#xff0c;启动时报错&#xff1a;soctherm OC ALARM&#xff0c;启动失败&#xff1b;然后系统一直重启 2、原因分析 “soctherm OC ALARM”是检测到系统温度超过安全阈值时发出的过热警告。 “soctherm”代表系统…...

QT:生成二维码 QRCode

目录 1.二维码历史2.QT源码3.界面展示4.工程源码链接 1.二维码历史 二维码&#xff08;2-Dimensional Bar Code&#xff09;&#xff0c;是用某种特定的几何图形按一定规律在平面&#xff08;二维方向上&#xff09;分布的黑白相间的图形记录数据符号信息的。它是指在一维条码…...

【LeetCode刷题之路】120:三角形最小路径和的两种解法(动态规划优化)

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…...

神经网络中常见的激活函数Sigmoid、Tanh和ReLU

激活函数在神经网络中起着至关重要的作用&#xff0c;它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景&#xff0c;选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数&#xff1a;Sigmoid、T…...

适用于学校、医院等低压用电场所的智能安全配电装置

引言 电力&#xff0c;作为一种清洁且高效的能源&#xff0c;极大地促进了现代生活的便捷与舒适。然而&#xff0c;与此同时&#xff0c;因使用不当或维护缺失等问题&#xff0c;漏电、触电事件以及电气火灾频发&#xff0c;对人们的生命安全和财产安全构成了严重威胁&#xf…...

企业靠网站接单/佛山关键词排名效果

由于项目需求需要做一个报表&#xff0c;选择FusionCharts作为工具使用。由于以 前没有接触过报表&#xff0c;网上也没有比较详细的fusionCharts教程&#xff0c;所以决定好好研究FusionCharts&#xff0c;同时做一个比较简单的教程提供参考。 由于能力有限(应届毕业生的菜鸟而…...

烟台网站建设工资/长尾关键词搜索网站

在打开的系统服务窗口&#xff0c;确认需要删除的服务的名称&#xff0c;如下图所示 4 用管理员的身份运行cmd&#xff0c;打开cmd窗口&#xff0c; 输入sc delete MySQL3命令&#xff0c;回车 5 提示删除服务成功 6 再次在界面中确认是否删除&#xff0c;发现已经删除...

如何做照片ppt模板下载网站/定制网站+域名+企业邮箱

2019年5月3日 星期五 补 最后一次&#xff0c;不要再补了&#xff01; 1.RJ-54端口&#xff1a;在这种端口上通过双绞线连接以太网。 10Base-T的RJ-45端口标志为“ETH”&#xff0c;而100Base-TX的RJ-45端口标志为“10/100bTX”&#xff0c;这是因为快速以太网路由器采用10/100…...

网站建设策划 流程/在线一键建站系统

Would you like to change the user interface language in any edition of Windows 7 or Vista on your computer? Here’s a free app that can help you do this quickly and easily. 您想在计算机的任何版本的Windows 7或Vista中更改用户界面语言吗&#xff1f; 这是一个…...

wordpress 4.0 静态化/微信营销管理软件

使用邮箱测试时&#xff0c;必须得开启邮箱的pop3/smtp服务&#xff0c;并找到邮箱正确的SMTP服务器地址以及端口。这里以QQ邮箱为例 打开QQ邮箱后&#xff0c;选择“设置-账户”这里写图片描述 拉动滚动条到下方这里写图片描述 开启pop3/smtp服务&#xff0c;并保存该授权码作…...

如何建设动漫网站/百度云官网入口

转&#xff1a;http://www.360sps.com/Item/UseTopLink.aspx 在SharePoint 2010环境的页面中&#xff0c;导航链接总体上可以分为两类&#xff0c;一类是显示在左侧的快速启动栏&#xff0c;另一类就是显示在顶部的全部导航链接栏。这两种导航只支持2级菜单项&#xff0c;如果…...