《数字图像处理基础》学习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 = 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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统基础-多线程超详细讲解(1)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-多线程超详细讲解(1) 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 …

QGIS提取面的顶点坐标到属性表

相关参考:QGIS中提取面的中心坐标到属性表-CSDN博客 polygon_layer QgsProject.instance().mapLayersByName("Polygon")[0]polygon_layer.startEditing() polygon_layer.dataProvider().addAttributes([QgsField("coors", QVariant.String, le…

面向对象编程中类与类之间的关系(二)

目录 1.引言 2.泛化(继承)关系 3.实现关系 4.聚合关系 5.组合关系 6.依赖关系 7.关联关系 7.1. 单向关联 7.2. 双向关联 7.3.自关联 8.总结 1.引言 在面向对象设计模式中,类与类之间主要有6种关系,他们分别是&#xff…

Android Studio安装完成后,下载gradle-7.4-bin.zip出现连接超时

文章目录 问题原因:因为下载镜像是谷歌,属于外网,不好正常连接,下载依赖。解决方法:找到gradle-wrapper.properties文件,修改镜像,如下图,然后再单击try again重新下载。 问题原因&a…

[论文阅读]Constrained Decision Transformer for Offline Safe Reinforcement Learning

Constrained Decision Transformer for Offline Safe Reinforcement Learning Proceedings of the 40th International Conference on Machine Learning (ICML), July 23-29, 2023 https://arxiv.org/abs/2302.07351 泛读只需要了解其核心思想即可。 安全强化学习(Safe Rei…

解决 IntelliJ IDEA 中使用 Lombok 编译报错的几种方法

目录 引言 常见的 Lombok 编译错误 解决方法 方法一:确保最新版本 Lombok 库已添加到项目依赖 方法二:检查 IDEA 的编译器设置 方法三:安装并启用 Lombok 插件 方法四:配置 Lombok 注解处理器 方法五:检查 Lom…

基于熵权法的TOPSIS模型

基于熵权法的TOPSIS模型 1. 简介 数学建模可以结合 熵权法 和 T O P S I S TOPSIS TOPSIS 法各自的特点,进行评价,这种组合模型的使用在数学建模比赛中使用的非常多。 在 2023 美赛 O 奖中就有使用该方法的,往年国赛国奖中也有 2. 熵权法介…

js基础入门篇

1.输出语句&#xff0c;内部样式&#xff0c;外部样式&#xff0c;数组定义 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

EV代码签名证书是什么?作用有哪些?如何获取呢?

我们都知道&#xff0c;黑客们往往会通过篡改软件代码来进行各种恶意行为&#xff0c;例如加入病毒、木马、恶意代码等&#xff0c;为了确保软件代码的完整性和可信任性&#xff0c;代码签名证书诞生了。代码签名证书又分为普通代码签名证书和EV代码签名证书&#xff0c;今天我…

python原地去重实战案例笔记

数据样例&#xff1a;&#x1f447; 最终想要的结果&#xff1a; 一、解决办法 思路&#xff1a;处理逐个元素检查是否已经出现过&#xff0c;重复的元素用空字符串替换。 # 原始数据 data [[数据1, 数据2, 数据3, 数据4, 数据5],[D, A, S, Q, J],[Y, L, D, J, O],[G, X, X,…

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而&#xff0c;电脑版的bilibili不能通过手机控制视频翻页和调节音量&#xff0c;这意味着观看视频时需要一直坐在电脑旁边。那么&#xff0c;有没有办法制作一个手机遥控器来控制bilibili电脑版呢&#xff1f; 首先…

如何在macOS开发中给 PKG 签名和公证(productsign+notarytool)

在macOS中&#xff0c;给PKG文件进行签名是一个确保用户能够顺利无警告地安装软件的重要步骤。以下是给PKG签名的详细步骤&#xff1a; 一、准备阶段 获取开发者账号和证书&#xff1a; 首先&#xff0c;需要在苹果开发者网站&#xff08;Apple Developer&#xff09;注册一个…

Linux系统下minio设置SSL证书进行HTTPS远程连接访问

文章目录 1.配置SSL证书使用HTTPS访问2.MINIO SDK 忽略证书验证3.使用受信任的证书 1.配置SSL证书使用HTTPS访问 生成域名对应的SSL证书&#xff0c;下载Apache版本&#xff0c;我目前只发现Apache这个里面有对应的私钥和证书 私钥重命名为private.key证书重命名为public.crt&…

AtCoder ABC376A-D题解

个人觉得 ABC 变得越来越难了/kk/kk/kk 比赛链接:ABC376 Problem A: Code #include <bits/stdc.h> using namespace std; int main(){int N,C;cin>>N>>C;for(int i1;i<N;i)cin>>T[i];int ans0,pre-1e5;for(int i1;i<N;i){if(T[i]-pre>C){…

Java:String类(超详解!)

一.常用方法 &#x1f94f;1.字符串构造 字符串构造有三种方法&#xff1a; &#x1f4cc;注意&#xff1a; 1. String是引用类型&#xff0c;内部并不存储字符串本身 如果String是一个引用那么s1和s3应该指向同一个内容&#xff0c;s1和s2是相等的&#xff0c;应该输出两…

使用Django框架开发企业级Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Django框架开发企业级Web应用 1 引言 2 Django简介 3 安装Python与Django 4 创建Django项目 5 设计应用结构 6 创…

行业首发|美格智能创新推出5G+Wi-Fi 7智能终端解决方案,端侧AI助力数智升维

在数字化时代的生产生活过程中&#xff0c;特殊场景下的通信需求愈发重要。高速、灵活、稳定的通信保障能够进一步提升生产生活的效率。随着5G网络的高速发展&#xff0c;一方面&#xff0c;其凭借低时延、高带宽、高可靠性和大规模连接的特性让移动终端的网络连接实现跨越式升…

UML总结

零&#xff1a;学习链接 UML_哔哩哔哩_bilibili 一&#xff1a;UML概述 二&#xff1a;类图 类图&#xff08;Class Diagram&#xff09;是统一建模语言&#xff08;UML&#xff09;中一种重要的图形表示&#xff0c;用于描述系统中的类及其之间的关系。它是面向对象设计中常…

基于SSM+微信小程序考试的管理系统(考试1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序考试的管理系统实现了管理员及用户。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;考试资料管理&#xff0c;用户交流管理&#xff0c;试卷管理&#xff…

大数据日志处理框架ELK方案

介绍应用场景大数据ELK日志框架安装部署 一&#xff0c;介绍 大数据日志处理框架ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;是一套完整的日志集中处理方案&#xff0c;以下是对其的详细介绍&#xff1a; 一、Elasticsearch&#xff08;ES&#xff09; 基本…