IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Matlab系列记录之图像处理(结束篇) -> 正文阅读

[人工智能]Matlab系列记录之图像处理(结束篇)

前言

对于图像处理,我现在也是一知半解的程度,毕业后基本就没接触这些东西了,如果有理解的不对的地方,欢迎指出~

只介绍下一些基本原理和MATLAB上进行图像处理的一些基本操作了,复杂了,我也估计搞不来了,是DIP大佬就可以忽略本篇了…/手动滑稽

图像知识

图像类型

常用或者经常听到的一些图像类型:RGB图、灰度图还有二值化图像等等等。

1、RGB图

顾名思义,由R、G、B三种分量组成的图像,这三种分量分别对应红、绿、蓝,在Matlab上以三维矩阵的形式进行存储,数值在0~255的区间,如果值全是0([0,0,0]),则表示黑色;反之全255([255,255,255]),就是代表白色了。

2、灰度图

灰度图,也称亮度图,在Matlab中是以二维矩阵的形式进行存储,矩阵的每个元素都代表一个像素的灰度值,取值范围也是0~255。

3、二值化图

二值化,就更好理解了,在Matlab中是以一个二维矩阵进行存储,其值只能是0或者1,即只有黑白两色。

读写图像文件

Matlab支持多种图像文件类型的操作,有BMP、JPG、GIF、ICO、TIF等,通过imread和imwrite来实现读写的操作,imread可以将指定位置的图片以矩阵形式读入工作区内,语法如下:

Image=imread(file,FMT);

file填入图像文件的路径和文件名,只写文件名的话,就代表在当前的工作路径或者系统目录查找对应图像文件;FMT是文件的类型,如:bmp;Image就是存储图像数据的矩阵了,彩图就是三维的,灰度图和二值化图像就是二维矩阵了。

写操作的语法与读的一致,语法如下:

Image=imwrite(file,FMT);

显示图像

使用imshow函数就可以显示工作区内图像数据对应的图像,也可以直接显示指定路径下的图像文件,使用语法为:

imshow(I,[low,high],param1,value1,param2,value2,...)
imshow(flie)

I是需要显示的图像数据矩阵,二维矩阵代表的是灰度图像,三维矩阵则为彩图;[low,high]是灰度图的灰度范围,灰度值比low的值小的会转成黑色显示,大于high的转成白色,在范围内的灰度值,按比例显示灰度级;file指定图像的路径和文件名,与读写的使用一致。

示例

%读取图像,显示图像,按新格式保存图像
Pic=imread('cameraman.tif');%系统自带的一幅图
imshow(Pic);
imwrite(Pic,'cameraman.bmp','bmp');

结果

image-20211002110912896

从结果中的1、2、3,可以看到图像按矩阵形式导入到工作区,然后显示再窗口中,并以新的格式写入当前的运行路径~

图像运算

直方图

图像灰度分布情况的信息对图像处理来说,而直方图就是直观的一个方法,使用 imhist 函数即可显示图片的直方图,直方图表述的是图片灰度级出现的频率,横坐标就是对应的灰度值,纵坐标就是其出现次数。

%语法
imhist(I);
imhist(I,n);
%备注:I是图像矩阵,n是指定的灰度级数目,会按将所有的灰度级均匀分布在这n个区间中,默认值是256.

示例

Pic=imread('cameraman.tif');
figure;
subplot(211);imhist(Pic);
subplot(212);imhist(Pic,50);

结果

image-20211002112726691

可以明显看到,灰度级数目随着n从默认值256变为50而变少了。

直方图均衡

直方图均衡又称灰度均衡,就是指将输入的图像转换成每一灰度级上都有近似相同的像素点的图像,从而使得输出的图像的直方图是均衡的,图像也因此增加了高对比度与大动态范围的效果。

用histeq就可以实现该方法

语法:[j,t]=histeq(I)
I是图像矩阵,j是均衡后的图像数据矩阵,t是变换矩阵

示例

Pic=imread('mandi.tif');
figure;
subplot(221),imshow(Pic);title('原图');
subplot(222),imhist(Pic);title('原图直方图');
[j,t]=histeq(Pic);%均衡处理
subplot(223);imshow(j);title('均衡后的图像');
subplot(224);imhist(j);title('均衡后的图像直方图');

结果

使用了一组一维变换矩阵进行变换

image-20211002114154977

图像进行灰度均衡处理后,对比度很明显进行了增强!灰度级的分布也均匀了许多~

image-20211002114109124

灰度线性变换

灰度线性变换和灰度非线性变换,是灰度变换的方式,也是常用的图像处理操作,先介绍下灰度线性变换~

简而言之就是通过指定的线性函数(拉伸或压缩)进行变换来调整图像的亮度,以实现图像增强的目的。

线性函数是一个直线方程,表达式如下:
( x , y ) = a f ( x , y ) + b (x,y)=af(x,y)+b (x,y)=af(x,y)+b

注:a是斜率,b是截距;
若a=1,b=0图像像素不发生变化
若a=1,b!=0图像所有灰度值上移或下移
若a>1输出图像对比度增强
若0<a<1输出图像对比度减小
若a<0暗区域变亮,亮区域变暗,图像求补

所以要进行线性变换,则只需要线性改变图像的灰度值即可~

示例

close all;
clear
I=imread('Lenna2.jpg');%这个是找的一个模特图
Pic=rgb2gray(I);%将彩图转灰度图,灰度图才能使用直方图函数分析

figure;
subplot(521); imshow(Pic);title('初始灰度图');
subplot(522); imhist(Pic);title('直方图');

%对比度提高
Pic1 = 1.5.*Pic;
subplot(523); imshow(Pic1);title('对比度增强');
subplot(524); imhist(Pic1);title('直方图');

%对比度降低
Pic2 = 0.5.*Pic;
subplot(525); imshow(Pic2);title('对比度降低');
subplot(526); imhist(Pic2);title('直方图');

%亮度增加
Pic3 = Pic + 50;
subplot(527); imshow(Pic3);title('亮度增强');
subplot(528); imhist(Pic3);title('直方图');

%反相显示,即负片
Pic4 = 255-Pic;
subplot(529); imshow(Pic4);title('反相');
subplot(5,2,10); imhist(Pic4);title('直方图');

结果

可以看到灰度值按线性进行了伸缩以及移动,也展现了不同的效果。

image-20211003143925964

灰度非线性变换

灰度非线性变换则是使用非线性函数进行变换来实现增强图像俩高度的目的,如:对数变换和伽马变换。

其中,对数变换可拉深深数值较小的灰度范围,压缩数值较大的灰度范围,比较符合人的视觉特性,其数学函数表达如下:
g ( x , y ) = c ? l o g ( 1 + f ( x , y ) ) g(x,y)=c*log(1+f(x,y)) g(x,y)=c?log(1+f(x,y))

其中,c是一个尺度比例常数,可以改变亮度

伽马变换又称指数变换,或幂变换,对应的函数表达式如下:
g ( x , y ) = c ? f ( x , y ) y g(x,y)=c*f(x,y)^y g(x,y)=c?f(x,y)y

其中,c是尺度比例常数,y是伽马常数。

介绍一个函数:imadjust

%语法:imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
%备注:gamma=1,则是线性变换,反之gamma变换
%low_x和high_x则是将0~255的灰度值范围做限定
%比如:low_in=0.2,high_in=0.8,则截取原图的灰度值,255*0.2~255*0.8,等下看实际效果。

示例

close all;
clear
I=imread('Lenna2.jpg');%这个是找的一个模特图
Pic=rgb2gray(I);%将彩图转灰度图,灰度图才能使用直方图函数分析

Pic_2=im2uint8(log(im2double(Pic)+1));%对数变换;log的输入类型是single和double,所以要先转变Pic的数据类型(用的是一个归一化处理函数),然后再反归一化,方便对比数值。
Pic_3=imadjust(Pic,[0.2 0.8],[],0.5);%伽马变换
figure;
subplot(231);imshow(Pic);title('原图');
subplot(234);imhist(Pic);title('直方图');
subplot(232);imshow(Pic_2);title('对数变换');
subplot(235);imhist(Pic_2);title('直方图');
subplot(233);imshow(Pic_3);title('伽马变换');
subplot(236);imhist(Pic_3);title('直方图');

结果

对数变换中,看到灰度值小的被拉伸,灰度值大的被压缩,因而导致图像亮度降低了一些,可以改变尺度比例常数来加亮;伽马变换,则是先取了原图中灰度值为51~204的数据,然后再做的变换,对比度也相对原图强了一些。

image-20211003152225133

图像变换

图像变换有种把原图像的在对应维度,一个起始坐标上的图像数据往维度中的其他坐标位置重新放置,类似在运动的感觉,这之中将用到插值的方法,对变换后的整个空间坐标中的新的图像数据值进行估计,Matlab中的函数大概就是这样实现的,接下来介绍缩放和旋转的内容。

图像缩放

使用imresize函数即可实现图像缩放功能

基础语法:B = imresize(A, SCALE, METHOD)
注:B是输出结果;A是原图的矩阵数据;SCALE是缩放因子,小于1是缩小,大于1是放大,1则不变;METHOD是插值的方法,有:
'nearest'    - 最邻近插值法
'bilinear'   - 双线性插值
'bicubic'    - 三次插值,默认的方法;%好像有的Matlab版本是另外的方法,我用Matalb R2016a进行的本篇记录

示例

[I,map]=imread('m83.tif');%map是颜色信息,放大缩小也都需要输入这些信息,灰度图则不需要
[J,map2]=imresize(I,map,0.5);
[K,map3]=imresize(I,map,2);
figure;imshow(I,map);title('原图');%只开一个figure,展示效果不佳
figure;imshow(J,map2);title('缩小');
figure;imshow(K,map3);title('放大');

结果

(img-se5Y0VT2-1633270658568)

图像旋转

图像旋转使用imrotate实现,语法如下:

B = imrotate(A,angle,method)
注:除了angle是角度外,其他与缩放的一致。

示例

I=imread('saturn.png');%map是颜色信息

J=imrotate(I,60);
K=imrotate(I,-30);

figure;
subplot(131);imshow(I);title('原图');
subplot(132);imshow(J);title('逆时针°');
subplot(133);imshow(K);title('顺时针30°');

结果

随着旋转,图像大小会有所改变,一般是比原图大(使用了同一个figure,会直接限定显示的尺寸,所以看着变小了,实际不然);然后多出的部分都会填0,即黑色。

image-20211003181530853

结语

从去年6月到今日,一年多,跌跌撞撞的写,关于Matlab系列的篇章终于可以说一声”结束了“,依然还有很多东西感觉未能很好的表述出来,不过对于大多数的学习和使用,已经足够了,再具体往下细化和专业化,就应该是一些具体领域的应用和实践。

敬请期待下一个系列文章的出现吧~


更多经常,等你发现~


  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 12:51:04  更:2021-10-04 12:52:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/22 5:28:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码