数字图像处理基础知识(自救指南)

news2024/11/23 20:29:41

概念

本部分多来自课件,见水印

数字图像处理的目的

  • 提高图像的视感质量,以达到赏心悦目的目的。
  • 提取图像中所包含的某些特征或特殊信息,主要用于计算机分析,经常用作模式识别、计算机视觉的预处理。
  • 对图像数据进行变换、编码和压缩,以便用于图像的存储和传输。

数字图像处理的意义

图像处理技术在航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事、文化艺术等领域得到了广泛的应用,成为一门引人注目、前景远大的新型学科。
用图像处理技术分析飞机遥感和卫星遥感照片,进行森林调查、海洋泥沙调查、渔业调查和水资源调查等资源调查,进行石油勘查、矿产量探测、大型工程地理位置勘探分析等资源勘察,进行土壤营养、水分和农作物生长、产量的估算等农业规划以及进行以地质结构、水源及环境分析等为内容的城市规划。在气象预报和太空其它星球研究方面,数字图像处理技术也发挥了相当大的作用。
在军事方面,图像处理和识别主要用于导弹的精确制导,各种侦察照片的判读,具有图像传输、存储和显示的军事自动化指挥系统,飞机、坦克和军舰模拟训练系统等。在公共安全方面,图像处理技术可用于指纹识别,人脸面部鉴别,不完整图片的复原以及交通监控、事故分析等。目前已投入运行的高速公路不停车自动收费系统中的车辆和车牌的自动识别都是图像处理技术成功应用的例子。
在文化艺术方面,数字图像艺术创作,动画制作,游戏,工艺美术设计,文物资料照片的复制和修复等,均有数字图像处理的成功应用,以至于逐渐形成一门新的学科: 计算机艺术。

相关学科

图像工程是一门系统地研究各种图像理论、技术和应用的交叉学科。从研究方法来看,它与数学、物理学、生理学、心理学、电子学、计算机科学等许多学科可以相互借鉴。从研究范围来看,它与模式识别、计算机视觉、计算机图形学等多个专业又互相交叉。另外,图像工程的研究进展与人工智能、神经网络、遗传算法、模糊逻辑等理论和技术都有密切的联系,它的发展应用与医学、遥感、通信、文档处理和工业自动化等许多领域也是密不可分的。

在这里插入图片描述

采样

图像在空间上的离散化称为采样。也就是用空间上部分点的灰度值代表图像,这些点称为采样点。图像是一种二维分布的信息,为了对它进行采样操作,需要先将二维信号变为一维信号,再对一维信号完成采样。具体做法是,先沿垂直方向按一定间隔从上到下顺序地沿水平方向进行直线扫描,取出各水平行上灰度值的一维扫描信号。而后再对一维扫描信号按一定间隔采样得到离散信号。即先沿垂直方向采样,再沿水平方向采样,用两个步骤完成采样操作。对于运动图像(即时间域上的连续图像),需先在时间轴上采样,再沿垂直方向采样,最后再沿水平方向采样三个步骤。
对一幅图像采样时,若每行(即横向)像素为M个,每列(即纵向)像素为N个,则图像大小为M×N个像素。
在进行采样时,采样点间隔的选取是一个非常重要的问题,它决定了采样后图像的质量,即忠实于原图像的程度。采样间隔的大小选取要依据原图像的细微浓淡变化来决定。一般,图像中细节越多,采样间隔应越小。

灰度变换

空间域增强
邻域操作/区处理
点操作/点处理

空间域增强可表示为 g ( x , y ) = T [ f ( x , y ) ] g(x,y)=T[f(x,y)] g(x,y)=T[f(x,y)],其中 f ( x , y ) f(x,y) f(x,y) g ( x , y ) g(x,y) g(x,y)分别代表增强前后的图像, T ( ⋅ ) T(·) T()代表对 f ( x , y ) f(x,y) f(x,y)的增强操作。

若空间域增强是在单个像素上进行的,即输出图像的每个像素值仅由相应的输入图像的像素值决定,则称其为点操作(点处理),或称为灰度变换

灰度变换就是把原图像的像素灰度经过某个变换函数变换成新的图像灰度。

灰度变换的常见操作有:

  • 直接灰度变换法
    • 线性、分段线性以及非线性变换
  • 直方图修正法
    • 直方图均衡化
    • 直方图规定化

灰度线性变换

假定原图像 f ( x , y ) f(x,y) f(x,y)的灰度范围为 [ a , b ] [a,b] [a,b],希望变换后图像 g ( x , y ) g(x,y) g(x,y)的灰度范围扩展至 [ c , d ] [c,d] [c,d],则灰度线性变换可表示为

g ( x , y ) = d − c b − a [ f ( x , y ) − a ] + c g(x,y)=\frac{d-c}{b-a}[f(x,y)-a]+c g(x,y)=badc[f(x,y)a]+c

在这里插入图片描述

直方图均衡化

直方图均衡化的基本思想是把原始图像的直方图变换为均匀分布的形式,从而增加图像灰度的动态范围,达到增强图像对比度的效果。经过均衡化处理的图像,其灰度级出现的概率相同,此时图像的熵最大,图像所包含的信息量最大。

变换后图像的灰度级从黑到白的次序不变,变换前后图像灰度范围一致

在这里插入图片描述
更多内容参阅下方“matlab操作基础”部分的有关内容。

图像噪声

图像在获取、存储、处理、传输过程中,会受到电气系统和外界干扰而存在一定程度的噪声。图像噪声使得图像模糊,甚至淹没图像特征,给分析带来困难。噪声可以理解为“妨碍人们感觉器官对所接收的信源信息理解的因素”。噪声也可以理解为不可预测的,只能用概率统计方法来认识的随机误差。噪声可以借用随机过程及其概率密度函数来描述,通常用其数字特征,如均值、方差等。

按照产生原因,图像噪声可分为外部噪声和内部噪声。由外部干扰引起的噪声为外部噪声,如外部电气设备产生的电磁波干扰、天体放电产生的脉冲干扰等。由系统电气设备内部引起的噪声为内部噪声,如内部电路的相互干扰。

按照统计特性,图像噪声可分为平稳噪声和非平稳噪声。统计特性不随时间变化的噪声称为平稳噪声。统计特性随时间变化的噪声称为非平稳噪声。

按噪声和信号之间的关系,图像噪声可分为加性噪声和乘性噪声。假定信号为 S ( t ) S(t) S(t),噪声为 n ( t ) n(t) n(t),如果混合叠加波形是S(t)+n(t)的形式,则称其为加性噪声; 如果叠加波形为 S ( t ) [ 1 + n ( t ) ] S(t)[1+n(t)] S(t)[1+n(t)]的形式,则称其为乘性噪声。加性噪声与信号强度不相关,而乘性噪声则与信号强度有关。为了分析处理方便,往往将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相独立的。

图像噪声一般具有以下特点:

  1. 噪声在图像中的分布和大小不规则,即具有随机性。
  2. 噪声与图像之间一般具有相关性。例如,摄像机的信号和噪声相关,黑暗部分噪声大,明亮部分噪声小。又如,数字图像中的量化噪声与图像相位相关,图像内容接近平坦时,量化噪声呈现伪轮廓,但图像中的随机噪声会因为颤噪效应反而使量化噪声变得不很明显。
  3. 噪声具有叠加性。在串联图像传输系统中,各个串联部件引起的噪声叠加起来,造成信噪比下降。

模板卷积

模板可以是一幅小图像,也可以是一个滤波器,或者说是一个窗口,通常用矩阵来表示。

每个模板都有一个原点,对称模板的原点一般取模板中心点,非对称模板的原点可根据使用目的选取。

模板卷积是数字图像处理中常用的一种邻域运算方式,它是指模板与图像进行类似于卷积或相关(尽管卷积与相关形式上不同,但由于它们之间的相似性,数字图像处理中常认为它们都是卷积)的运算。

模板卷积可实现图像平滑、图像锐化、边缘检测等功能。

模板卷积中的模板又称为卷积核,卷积核中的元素称为卷积系数或模板系数或加权系数,其大小及排列顺序决定了对图像进行邻域处理的类型。

图像平滑

平滑和锐化均属于空间滤波,平滑采用低通滤波器,锐化采用高通滤波器,它们的操作基础都是卷积

中值滤波

中值滤波是一种非线性滤波,它能在滤除噪声的同时很好地保持图像边缘。中值滤波的原理很简单,它把以某像素为中心的小窗口内的所有像素的灰度按从小到大排序,取排序结果的中间值作为该像素的灰度值。

图像锐化

图像模糊的实质就是图像受到平均或积分运算,因而用它的逆运算“微分”,求出信号的变化率,有加强高频分量的作用,可以使图像轮廓清晰。在数字图像处理中,微分运算由差分运算来近似实现。

频率域滤波

频率域滤波的基础是傅里叶变换,见下方“滤波”小节有写。一般有低通滤波器(用于平滑)和高通滤波器(用于锐化)两种,它们的原理是正好相反的。

基于区域的分割(区域生长)

区域生长的基本思想是把具有相似性质的像素集合起来构成区域。首先对每个要分割的区域找出一个种子像素作为生长的起点,然后将种子像素邻域中与种子像素有相同或相似性质的像素合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续上面的过程,直到没有可接受的邻域像素时停止生长。

在这里插入图片描述
区域生长法需要选择一组能正确代表所需区域的种子像素,确定在生长过程中的相似性准则,制定让生长停止的条件或准则。相似性准则可以是灰度级、彩色、纹理、梯度等特性。选取的种子像素可以是单个像素,也可以是包含若干个像素的小区域。种子像素的选取一般需要先验知识,若没有则可借助生长准则对每个像素进行相应计算。如果计算结果出现聚类,则接近聚类中心的像素可取为种子像素。生长准则有时还需要考虑像素间的连通性,否则会出现无意义的分割结果。

matlab操作基础

灰度调节imadjust

类似于阻隔和钳制,这种处理对于强调感兴趣灰度区非常有用

Im = imread('1.jpg'); %读入原图
I2=imadjust(Im,[0.2 0.5],[0 1]);%将0.2-0.5之间的灰度扩展到整个0-1范围

噪声imnoise

本小节参阅下方文章

Mathworks - imnoise
图像处理之matlab中imnoise函数用法详解

直方图与直方图均衡化

Matlab中imhist函数的使用及图像直方图的概念

通过直方图均衡化能够自适应地有效改善图像对比度不足问题

直方图均衡化的原理解释如下:

对于图像的灰度,可以认为是范围 [ 0 , L − 1 ] [0,L-1] [0,L1]范围内的随机变量,原图像的灰度范围分成若干个区间,每个区间映射为一个值,随着区间越靠近 L − 1 L-1 L1,映射的值应当越大,映射曲线左到右呈上升阶梯状。划分多少个区间就会产生多少个灰度级。

clear;
Im = imread('3.png'); %读入原图
h=rgb2gray(Im); % 转灰度图
subplot(2,2,1)
imshow(h);
title('原图');
subplot(2,2,2)
imhist(h);
title('原图直方图');
subplot(2,2,3)
j = histeq(h,128); % 直方图均衡化,灰度级是128,默认是n=64
imshow(j);
title('直方图均衡化后的图');
subplot(2,2,4)
imhist(j);
title('均衡化后的直方图');

在这里插入图片描述

再看看其他灰度级的:

在这里插入图片描述

在这里插入图片描述

滤波

低通(平滑)滤波器:通过(平均值)模糊图像来平滑图像,最明显的应用是降噪
高通(锐化)滤波器:通过导数来锐化图像,突出灰度中的过渡

零填充→产生暗色边框伪影

中值滤波器

中值滤波器是一种常用的非线性滤波器,其基本原理是选择待处理像素的一个邻域中各像素值的中值来代替待处理的像素,其主要功能是像素的灰度值与周围像素比较接近,从而消除孤立的噪声点,所以中值滤波器能够很好的消除椒盐噪声。不仅如此,中值滤波器在消除噪声的同时,还能有效的保护图像的边界信息,不会对图像造成很大的模糊(相比于均值滤波器)。(本段内容出处:知乎 - 四种图像滤波算法实现及原理解析)

MATLAB–数字图像处理 中值滤波

中值滤波有两种方法,一种是使用库函数medfilt2,一种是自己写,可参阅上文

clear;
Im = imread('3.png'); %读入原图
h=rgb2gray(Im);
subplot(1,3,1)
imshow(h);
title('原图');
subplot(1,3,2);
J = imnoise(h,'salt & pepper',0.1);
imshow(J);
title('添加噪声后');
subplot(1,3,3)
imshow(medfilt2(J,[2,2]));
title('中值滤波');

在这里插入图片描述

前置知识:傅里叶变换

傅里叶变换在频域滤波领域的用途是,将图像的数据从空间域转换到频率域,在频率域对图像进行处理,处理后再将图像进行傅立叶反变换转换到空间域。

属于频率域滤波的有:

  • 使用低通滤波器的滤波
  • 使用高通滤波器的滤波
  • 选择性滤波

你需要了解的 Matlab 相关函数包括(超链接的是官方文档):

  • fftshift:将零频分量移到频谱中心
  • fft2:二维快速傅里叶变换

低通滤波器

在以原点为中心、以D 0 D_0D0​为半径的圆内,无衰减地通过所有频率,而在该圆外“切断”所有频率的二位低通滤波器,称为理想低通滤波器(ILPF)

在这里插入图片描述

clear;
Im = imread('3.png'); %读入原图
h=rgb2gray(Im);
subplot(2,2,1)
J = imnoise(h,'gaussian'); % 将方差为 0.01 的零均值高斯白噪声添加到灰度图像h
imshow(J); % 显示最初的噪声图
title('原噪声图');
subplot(2,2,2);

s = fftshift(fft2(J)); % 傅里叶变换将图像从空间域变换到频率域
imshow(log(abs(s)),[]);
title('原图频率域');
subplot(2,2,3)

% 低通滤波部分关键代码
[a,b] = size(h); % 获取图像大小
a0 = round(a/2); % 获取频率域图像的中心,便于下面计算distance
b0 = round(b/2);
d0=40; % 设置截止频率是40
for i =1:a
    for j = 1:b
        distance = sqrt((i-a0)^2 + (j-b0)^2);
        if distance<d0
            h = 1;
        else
            h = 0;
        end
        result(i,j) = h*s(i,j);
    end
end
new_img = uint8(real(ifft2(ifftshift(result))));

imshow(new_img,[]);
title('低通滤波后');
subplot(2,2,4);
imshow(log(abs(result)),[]);
title('滤波后频率域');

循环里的h就像给图像加一个遮罩,为1就代表s保留,为0就代表s的内容不保留,遮罩完的频率域图像就是result变量所保存的。

高通滤波器

高通滤波器正好是很低通滤波器相反,由于结论是是显而易见的,故只把核心代码放在下面

% 高通滤波部分关键代码
[a,b] = size(h); % 获取图像大小
a0 = round(a/2); % 获取频率域图像的中心,便于下面计算distance
b0 = round(b/2);
d0=40; % 设置截止频率是40
for i =1:a
    for j = 1:b
        distance = sqrt((i-a0)^2 + (j-b0)^2);
        if distance<d0
            h = 0;
        else
            h = 1;
        end
        result(i,j) = h*s(i,j);
    end
end
new_img = uint8(real(ifft2(ifftshift(result))));

其实就是把if语句里的0和1换了下位置。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

炫云为什么要采用让人看不懂的GHZ计费?

很多人看到炫云GHZ计费都表示看不懂&#xff0c;觉得麻烦&#xff0c;没有按核数、按线程或者按分钟计费简单易懂&#xff0c;甚至还被某些同行经常拿来攻击。哪为什么炫云还坚持用GHZ计费呢&#xff1f;哪是因为使用GHZ计费更加公平、透明&#xff0c;且具有硬件无关性。今天就…

10个适合Web开发的最佳CSS生成器工具

在写CSS的时候&#xff0c;我们可以手写CSS&#xff0c;也可以直接使用一些CSS生成器来完成&#xff0c;今天我就跟大家分享10个好用的CSS生成器工具&#xff0c;帮助你提升工作效率。 1.纯CSS条纹生成器 网址&#xff1a;https://stripesgenerator.com 没有 Flash&#xff0…

QT多线程基础

文章目录 前言一、多线程概念介绍二、创建一个线程三、start和terminate函数四、如何不使用terminate函数终止线程总结 前言 本篇文章来讲解一下QT中的多线程使用方法。 其实线程这个概念对于我们来说并不陌生&#xff0c;main函数在多线程中一般就被称为主线程。 在QT中&am…

《计算机网络—自顶向下方法》 第四章Wireshark实验:TCP 协议分析

在因特网协议族&#xff08;Internet Protocol Suite&#xff09;中&#xff0c;TCP 层是位于 IP 层之上&#xff0c;应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接&#xff0c;但是 IP 层不提供这样的流机制&#xff0c;而是提供不可靠的包交换。…

Ordinal 是什么? BTC NFT 解释

Ordinal NFT 于 2023 年 1 月 20 日由开发者 Casey Rodarmor 在 BTC 主网上推出&#xff0c;它是在 BTC上 创建 NFT 的最新方式。虽然 BTC 上的 NFT 并不是一个新概念&#xff0c;BTC 之上的第 2 层网络&#xff08;例如 Counterparty 和 Stacks&#xff09;已经支持基于 BTC 的…

第七届中华梦乡·福清石竹山梦文化节举办

第七届中华梦乡福清石竹山梦文化节现场 5月9日至12日&#xff0c;第七届中华梦乡福清石竹山梦文化节暨海峡两岸&#xff08;福清&#xff09;道教论坛在福州福清举办。本届梦文化节以“福佑中华 梦圆石竹”为主题&#xff0c;旨在发挥海峡两岸道教界同根同源、联系密切的独特优…

【Java零基础入门篇】第 ⑤ 期 - 抽象类和接口(二)

博主&#xff1a;命运之光 专栏&#xff1a;Java零基础入门 学习目标 1.了解什么是抽象类&#xff0c;什么是接口&#xff1b; 2.掌握抽象类和接口的定义方法&#xff1b; 3.理解接口和抽象类的使用场景&#xff1b; 4.掌握多态的含义和用法&#xff1b; 5.掌握内部类的定义方法…

【HBase】介绍

文章目录 什么时候用Hbase&#xff1f;常见应用场景逻辑结构物理结构数据模型Name Space TableRowColumnTime StampCell 存储设计HLogHFileHfile生成方式 Apache HBase™ 是以 hdfs 为数据存储的&#xff0c;一种分布式、可扩展的 NoSQL 数据库。 Bigtable 是一个稀疏的、分布式…

5项目五:W1R3S-1(思路为主!)

特别注明&#xff1a;本文章只用于学习交流&#xff0c;不可用来从事违法犯罪活动&#xff0c;如使用者用来从事违法犯罪行为&#xff0c;一切与作者无关。 目录 前言 一、信息收集 二、网页信息的收集 三、提权 总结 前言 思路清晰&#xff1a; 1.信息收集&#xff0c;…

《程序员面试金典(第6版)》面试题 16.19. 水域大小(深度优先搜索,类似棋盘类问题,八皇后的简化版本,C++)

题目描述 你有一个用于表示一片土地的整数矩阵land&#xff0c;该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小&#xff0c;返回值需要从小到…

【数据结构与算法】图的遍历与拓扑排序

文章目录 一、用数组模拟邻接表二、图的深度优先遍历&#xff08;dfs&#xff09;2.1 概念2.2 例题&#xff1a;树的重心 三、图的广度优先遍历&#xff08;bfs&#xff09;3.1 概念3.2 例题&#xff1a;图中点的层次 四、拓扑排序4.1 概念4.2 例题&#xff1a;有向图的拓扑序列…

2直接连接的网络与VLAN划分-2.2【实验】【计算机网络】

2直接连接的网络与VLAN划分-2.2-2.3【实验】【计算机网络】 前言推荐2直接连接的网络与VLAN划分2.1共享式以太网和交换式以太网2.2交换机MAC地址表建立与帧转发实验目的实验内容及实验环境实验原理交换机通过逆向学习帧的源地址&#xff0c;构建MAC地址表;交换机中MAC地址的构建…

netty基础(五)

1.基本介绍 1>.异步的概念和同步相对.当一个异步过程调用发出后,调用者不能立刻得到结果.实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者; 2>.Netty中的I/O操作是异步的,包括Bind、Write、Connect等操作会简单的返回一个 ChannelFuture; 3>.调用…

二、Eureka注册中心

目录 注册中心主要有三种角色&#xff1a; 1、服务提供者&#xff08;RPC Server&#xff09; 2、服务消费者&#xff08;RPC Client&#xff09; 3、服务注册中心&#xff08;Registry&#xff09; 注册中心实现原理 常用的注册中心&#xff1a; 常用注册中心对比&…

【C/C++每日一练】总目录(更新至2023.5.12)

C/C 2023.05 2023.5.11-2023.5.12 20230512 1. 成绩打印 ※ 2. 按要求补齐数组 &#x1f31f;&#x1f31f;&#x1f31f; 3. 水仙花数 ※ 20230511 1. 最长公共前缀 &#x1f31f; 2. 打家劫舍 &#x1f31f;&#x1f31f; 3. 最接近的三数之和 &#x1f31f;&am…

修改通过CDH安装的Kafka和Zookeeper等组件的最大文件句柄数

目录 1.查看当前kafka最大文件句柄数 2.修改supervisord.service 服务配置文件 3.加载配置文件 4.重启supervisord.service服务 5.重启kafka等组件 6.查看修改后最大文件句柄数 7.查看kafka当前使用的文件句柄数 参考&#xff1a; 1.查看当前kafka最大文件句柄数 jpsc…

【rust】| 05——语法基础 | 流程控制

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础 | 变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 文章目录 流程控制1. 条…

双向链表的功能实现

前言&#xff1a;我们已经学习并知道了单链表的实现&#xff0c;链表的实现方式不只是单链表一种&#xff0c;今天我们就来介绍一种新的结构&#xff0c;就是双链表结构&#xff0c;本质上是将节点间进行双向链接&#xff0c;从而使一些操作更加容易实现。 目录 1.双向链表的简…

OpenCL编程指南-3.3类型转换

隐式类型转换 隐式类型转换是一种自动的类型转换&#xff0c;只要混合使用不同的类型&#xff0c;编译器就会完成这种隐式类型转换。这里支持表4-1中定义的标量类型&#xff08;除void、double和half以外&#xff09;的隐式转换。完成隐式转换时&#xff0c;并不只是重新解释一…

MySQL:数据库的增删查改

我们这一篇主要介绍数据库的增删查改~ 增&#xff1a;insert into 表名 value (); 删&#xff1a;delete from 表名; 查&#xff1a;select from 表名; 改&#xff1a;update 表名; 目录 1.insert&#xff08;增&#xff09; 2.select&#xff08;查询&#xff09; 2.1 全列…