《数字图像处理基础》学习03-图像的采样

 在之前的学习中我已经知道了图像的分类:物理图像和虚拟图像。
《数字图像处理基础》学习01-数字图像处理的相关基础知识_图像处理 数字-CSDN博客

目录

一,连续图像和离散图像的概念 

二,图像的采样

1, 不同采样频率采样同一张图像


一,连续图像和离散图像的概念 

 因为图像的表现方式不同,所以也可以分为:连续图像和离散图像。

连续图像:在二维坐标系上是连续变化的。(即该图像画面的像素点是无限稠密的)。相信学过《数字信号处理》的还记得“模拟信号”这一概念,模拟信号就是连续的,因此模拟信号也称为连续信号。对于连续的信号而言,它所包含的信号就称为模拟信号。在《数字图像处理》中,连续图像所包含的图片,图纸,或景物等原始信息都是连续的模拟信号,因此连续图像也称为模拟图像。

离散图像:使用数字阵列来表示。离散图像也称为数字图像。这种图像所包含的数字信号就是计算机所能处理的。因此,学习数字图像处理的过程中,第一个环节就是将连续图像信息转化为数字形式。即将连续图像的模拟信号转换成离散图像的数字信号,必然会经历采样量化这两个步骤。

二,图像的采样

采样:将时域或者是空域上的连续图像(或模拟图像)变换成离散采样点(或像素点)集合的一种操作。在采样的过程中需要注意的是,图像是二维信号,基本上是采取二维平面信息的分布方式来描述的。 由于采样一般是对一维信号的采样,因此,需要将二维信号转换成两次一维采样操作实现,一般先进行(xing)行(hang)采样 ,接着再对列采样。对于二维信号,是在二维空间中进行采样,通常是建立一个二维网格来采样。这种方法可以更好地保留信号的空间结构和特征。

行采样:沿垂直方向按一定间隔,从上至下的顺序以直线的方式沿水平方向扫描 。↓ ↓ ↓ ↓ ↓ ↓

通过上面的行采样能够取出各个水平行上的灰度值(灰度值又称为灰阶:表示图像中每个像素的亮度或强度)的一维扫描信息,从而获得图像每行的灰度值阵列,即一组一维的连续信号。

列采样:在行采样的基础上沿水平方向按一定间隔,从左至右的顺序以直线的方式沿垂直方向扫描

一般情况下,水平方向上的采样间隔和垂直方向的采样间隔相同。

经过了行采样和列采样之后,就会得到多个图像元素(像素),即每一个小方格,如下👇

对一副图像采样后,若每行(横向)像素有M个,每列(纵向)像素有N个,则图像分辨率(分辨率:采样所获得的图像总像素)为M\times N个像素,例如上图中的图像,每行有9个像素,每列有8个像素,因此,该图像的分辨率为9 \times 8=72个像素。如果想要得到更加清晰的图像质量,就需要提高图像采样的像素点数,同时也会需要更大的存储空间。

接下来学习评价数字图像效果的四个评价参数:

  1. 图像分辨率:采样所获得的图像总像素。图像分辨率越大,图像越清晰,同时存储量也大。
  2. 采样密度:图像上单位长度所包含的采样点数。像素间距=1/采样密度。
  3. 采样频率:一秒内采样的次数。反映了采样点之间的间隔大小,采样频率越高,丢失的信息越少,采样除的样本越细腻逼真,图像质量越好,同时也如前面提到的,所需要的存储空间也就越大。
  4. 扫描分辨率:每英寸扫描所得到的点。单位是DPI(dot per inch),一英寸≈2.5cm。扫描分辨率越大,表示被扫描的图像转化为数字化图像越逼真,扫描仪质量也越好。

对于上面的这四个评价参数来说,采样间隔的选取是一个非常重要的问题,它决定了采样后图像的质量,即和原图像相似的程度(或称忠实于原图像的程度),采样间隔的大小取决于原图像中包含的细微亮暗变化。

采样间隔可根据香浓采样定理(或称奈奎斯特采样定理)选取,只要采样频率(或称奈奎斯特率 f_{s})高于或等于原始频率的两倍(原始频率一般选取信号最高频率  f_{h},也称为奈奎斯特频率):

即满足关系:f_{s}\geq 2f_{h}
其中:

  1. Nyquist 频率 f_{h}:指的是一个信号的最高频率,它的数值是采样频率的一半。根据奈奎斯特采样定理,为了确保能够无失真地重构一个信号,采样频率必须至少是信号带宽的两倍。因此,对于一个带宽为 B 的信号,Nyquist 频率就是 B。

  2. Nyquist 率 f_{s}:通常是指数字信号处理中的一个术语,用来描述信号采样时所需的最低采样频率。具体而言,Nyquist 率通常是指两倍于最大信号频率的采样频率。

如果采样间隔满足香农定理,图像信息之间不会产生频率混叠,可以完全精确地记录图像信息,则数字图像就可以生动地再现原始场景。

1, 不同采样频率采样同一张图像

如果不知道matlab程序设计中的基础语法的请点击下面的链接并查看相关内容:
Matlab学习04-matlab程序设计中的基础语句-CSDN博客

接下来使用matlab编写代码,并使用不同的采样频率去采样同一张图像,如下👇
【ps:采样间隔越大,图像越模糊,细节信息无法辨认。例如上述的采样频率n=10和n=20】

其中:

  1.  oim存储获取到的原图像(original image),imread是打开并获取具体图像的函数,传入参数为图像在本地计算机中的地址。如果不知道文件路径的添加怎么搞,请点击下面链接并跳转到相关文章去查看:↓ ↓ ↓ ↓ ↓ ↓ ↓《数字图像处理》学习02-BMP位图文件_位图文件大小的计算公式-CSDN博客

  2. figure;创建一个用于图像(原图像或处理后的图像)显示的窗口,figure;后面可以直接加上图像显示函数,例如 imshow 函数:

    >> help imshow
    imshow - 显示图像
    
        此 MATLAB 函数 在图窗中显示灰度图像 I。imshow 使用图像数据类型的默认显示范围,并优化图窗、坐标区和图像对象属性以便显示图像。
    
        imshow(I)

    如果figure命令后面直接跟着图像显示函数,则一幅图像直接占据一整个图像窗口。如下👇

    在数字图像处理中,会有两种图像:原图像和处理后的图像。一般来说,建议将这两种图像都显示在同一个图像窗口中,方便对照并查看处理后的图像的细微变化。
    因此,推荐使用subplot函数,在同一个图像窗口中显示多幅图像,该函数可以写在figure窗口函数后面,图像显示函数的前面:

    >> help subplot
    subplot - 在平铺位置创建坐标区
    
        此 MATLAB 函数 将当前图窗划分为 m×n 网格,并在 p 指定的位置创建坐标区。MATLAB
        按行号对子图位置进行编号。第一个子图是第一行的第一列,第二个子图是第一行的第二列,依此类推。如果指定的位置已存在坐标区,则此命令会将该坐标区设为当前坐标区。
    
        subplot(m,n,p)

    例如,现在我需要将4幅图像在同一个图像窗口中显示,并且按照两行两列进行排列:

    可以看到这四幅图像的显示的代码编写都一样,唯一不同就是对应的图像序号。因此,可以考虑给个for循环:

    为了能够很好的区分每一幅图像,一般都会给图像加上标题title,即在图像显示函数的后面写上title函数:并加上图像的序号组成图像的标题,由于序号是数值型的数据,不能和字符串'图像'直接拼接,这个时候可以使用num2str函数:

    >> help num2str
    num2str - 将数字转换为字符数组
    
        此 MATLAB 函数 将数值数组转换为表示数字的字符数组。输出格式取决于原始值的量级。num2str 对使用数值为绘图添加标签和标题非常有用。
    
        s = num2str(A)

    该函数将数值型数据转换成字符串类型之后,就可以和字符串进行拼接,如下 ↓:

  3. 由于是不同的采样间隔,因此,直接定义一个数组类型变量N,存储不同的采样间隔:

    N=[1,10,20];

    如果要获取其中的元素,只需要使用数组名N (想要获取的元素序号),例如,输出10

  4. 前面也提到过,图像是二维信号,采样原图像时,原图像的行和列的都需要被采样到,并且在采样的时候一般会选择保留原图像所有的颜色通道,:

    sim= oim(1:n:end,1:n:end,:);

    其中:
    1)sim:sample image采样图像
    2)oim:原图像
    3)第一个 1:n:end ,表示对原图像的从第一个像素,采样到最后end一个像素,采样步长为 n(每隔n个像素采样一次)。
    4)第一个 1:n:end ,表示对原图像的从第一个像素,采样到最后end一个像素,采样步长为 n(每隔n个像素采样一次)。
    5)最后的冒号,表示保留原图像的所有颜色通道。
    这里举个例子,来进一步说明图像的两次一维采样。
    oim图像的像素为4x4,现在对其采样,采样步长为2,输出的采样结果sim如下:

代码👇 

oim = imread('lena_color_256.tif'); 
figure;
subplot(2,2,1);
imshow(oim);
title('原图像');
N= [1,10,20]; 
for i = 1:length(N)
    n = N(i);
    sim= oim(1:n:end,1:n:end,:);
    subplot(2,2,i+1);
    imshow(sim);
    title(['采样间隔n= ', num2str(n)]);
end

 如果有问题请在评论区留言或者是私信我,回复时间不超过一天。

《数字图像处理基础》学习04-图像的量化-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905612.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务实战系列之玩转Docker(十七)

导览 前言Q:如何实现etcd数据的可视化管理一、创建etcd集群1. 节点定义2. 集群成员2.1 docker ps2.2 docker exec2.3 etcdctl member list 二、发布数据1. 添加数据2. 数据共享 三、可视化管理1. ETCD Keeper入门1.1 简介1.2 安装1.2.1 定义compose.yml1.2.2 启动ke…

MobileNetv2网络详解

背景: MobileNet v1中DW卷积在训练完之后部分卷积核会废掉,大部分参数为“0” MobileNet v2网络是由Google团队在2018年提出的,相比于MobileNet v1网络,准确率更高,模型更小 网络亮点: Inverted Residu…

巨好看的登录注册界面源码

展示效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevic…

机械臂建模之DH表

本文配图 取自哔哩哔哩机器人学视频 林沛群老师的PPT 机械臂几何直观描述 首先要知道DH表中四个参数的含义&#xff1a; 对于 a 、 α 、 d 、 θ i a、 \alpha 、 d 、 \theta_i a、α、d、θi​ 四个参数&#xff0c;上图采用MDH的方式&#xff0c;对于一个轴的这四个参数&a…

Flink CDC系列之:学习理解核心概念——Data Pipeline

Flink CDC系列之&#xff1a;学习理解核心概念——Data Pipeline 数据管道sourcesink管道配置Table IDroutetransform案例 数据管道 由于 Flink CDC 中的事件以管道方式从上游流向下游&#xff0c;因此整个 ETL 任务被称为数据管道。 管道对应于 Flink 中的一系列操作。 要描…

Git 本地操作(2)

会以下操作就可以完成本地的版本控制了&#xff0c;就不需要再复制文件每次改一个东西就复制整个工程保存下来啦&#xff01; 建议先看上一篇文章噢 &#xff01;&#xff01;&#xff01; 一、新建项目git本地操作 1、初始化仓库 创建一个 project 文件夹&#xff0c;将需…

Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景

介绍 网络爬虫&#xff08;Web Crawler&#xff09;是自动化的数据采集工具&#xff0c;用于从网络上提取所需的数据。然而&#xff0c;随着反爬虫技术的不断进步&#xff0c;很多网站增加了复杂的防护机制&#xff0c;使得数据采集变得更加困难。在这种情况下&#xff0c;Pyt…

Linux中NFS配置

文章目录 一、NFS介绍1.1、NFS的工作流程1.2、NFS主要涉及的软件包1.3、NFS的主要配置文件 二、安装NFS2.1、更新yum2.2、安装NFS服务2.3、配置NFS服务器2.4、启动NFS服务2.5、配置防火墙&#xff08;如果启用了防火墙&#xff0c;需要允许NFS相关的端口通过&#xff09;2.6、生…

MATLAB发票识别系统

课题介绍 该课题为基于MATLAB的发票识别系统。主要识别发票的编号。可定做发票的日期&#xff0c;金额等字段的识别。通过输入图片&#xff0c;校正&#xff0c;定位目标区域&#xff0c;分割&#xff0c;字符分割&#xff0c;模板匹配识别&#xff0c;得出结果。整个设计包含…

前端拖拽库方案之react-beautiful-dnd

近期&#xff0c;知名 React 拖拽库 react-beautiful-dnd 宣布了项目弃用的决定&#xff0c;未来将不再维护。这一决定源于其存在的缺陷与局限性&#xff0c;促使作者转向开发一个更加现代化的拖拽解决方案——Pragmatic drag and drop&#xff08;下面会介绍&#xff09;&…

Rust 力扣 - 643. 子数组最大平均数 I

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的最大和即可&#xff0c;遍历过程中刷新最大值 结果为窗口长度为k的最大和 除以 k 题解代码 impl Solution {pub fn find_max_average(nums: Vec<…

Linux——五种IO模型

目录 一IO基本理解 二五种IO模型 1五种IO模型示意图 2同步IO和异步IO 二非阻塞IO 1fcntl 2实现非阻塞IO 三多路复用 1select 1.1定位和作用 1.2介绍参数 1.3编写多路复用代码 1.4优缺点 2poll 2.1作用和定位 2.2介绍参数 2.3修改select代码 3epoll 3.1介绍…

php解密,sg11解密-sg15解密 如何由sourceGuardian11-sourceGuardian15加密(sg11加密~sg15加密)的源码

sg11加密~sg11加密的PHP文件运行需安装SG11加密-SG15加密组件使用、支持WINDOW及LINUX各版本 sg11解密(SourceGuardian)-sg15解密(SourceGuardian)&#xff0c;号称目前最安全的组件加密已可以解密&#xff0c;解密率99.9%&#xff0c;基本可以直接使用&#xff0c;代码特征是…

Jetson OrinNX平台CSI相机导致cpu load average升高问题调试

1. 前言 硬件: Orin NX JP: 5.1.2, R35.4.1 用v4l2-ctl --stream-mmap -d0 命令去获取相机数据时, 用top查看cpu使用情况, CPU占用率很低,但load average在1左右, 无任何程序运行时,load average 为0 用ps -aux 查看当前进程情况,发现有两个系统进程vi-output, …

qt QIcon详解

1、概述 QIcon是Qt框架中的一个类&#xff0c;专门用于处理和显示图标。它提供了灵活的接口&#xff0c;支持从多种来源加载图标&#xff0c;如文件、资源或系统主题&#xff0c;并且支持多种图像格式&#xff0c;如PNG、JPEG、SVG等。QIcon类能够与Qt中的各种控件&#xff08…

【操作系统实验课】Linux操作基础

1. 打开Ubuntu Ubuntu-22.04 虚拟机安装-CSDN博客 打开虚拟机软件 启动其中的Ubuntu22.04 打开Ubuntu系统终端 2. 创建目录和文件 创建test3目录&#xff1a; 在终端中输入命令&#xff1a;mkdir /test3。此命令用于在根目录下创建test3目录。&#xff08;注意在命令中&…

【Linux-进程间通信】匿名管道的应用-进程池实现+命名管道的应用ClientServer通信

匿名管道的应用--进程池/C实现 当系统中需要处理众多任务时&#xff0c;可以将这些任务分配给多个子进程来分担工作。然而&#xff0c;频繁地创建和销毁进程会导致较高的时间成本。为减少这种开销&#xff0c;可以采取预先创建一组子进程的策略&#xff08;以避免在任务分配时…

java设计模式之创建者模式(5种)

设计模式 软件设计模式&#xff0c;又称为设计模式&#xff0c;是一套被反复利用&#xff0c;代码设计经验的总结&#xff0c;他是在软件设计过程中的一些不断发生的问题&#xff0c;以及该问题的解决方案。 **创建者模式又分为以下五个模式&#xff1a;**用来描述怎么“将对象…

数据库->数据库约束

目录 一、数据库约束 1.定义 2.约束类型 3.NOT NULL 非空约束 4. UNIQUE 唯一约束 5.PRIMARY KEY 主键约束 1.主键的使用 2.把表中的主键交给数据库自己维护 2.1主键列设置为null 则使用自增 2.2插入除了主键以外的所有非空列&#xff08;推荐方法&#xff09; 2.3自…

ValueError: Object arrays cannot be loaded when allow_pickle=False

文章目录 问题解决方法1&#xff1a;allow_pickleTrue解决方法2&#xff1a;降低numpy版本错误原因&#xff1a;python和numpy版本不兼容 问题 Traceback (most recent call last): File “D:\project\test_st\retrieval\read_npy.py”, line 4, in data np.load(‘mosi0__le…