MATLAB06:数字图像处理

MATLAB06:数字图像处理文章目录 MATLAB06 数字图像处理图像的读取和展示图像在 MATLAB 中的存储格式读取和展示图像图像的点运算图像的四则运算像素的统计分布 MATLAB06 数字图像处理图像的读取和展示图像在 MATLAB 中的存储格式 MATLAB 能够处理的数字图像分为三种 二值图像 灰度图像 彩色图像 二值图像在 MATLAB 中以一个矩阵存储 矩阵中元素的取值为 0 表示白 或 1 表示黑 灰度图

pdf版本笔记的下载地址: MATLAB06_数字图像处理(访问密码:3834)

学习一门技术最好的方式就是阅读官方文档,可以查看MATLAB官方文档

图像的读取和展示

图像在MATLAB中的存储格式

MATLAB能够处理的数字图像分为三种:二值图像,灰度图像,彩色图像.

在这里插入图片描述

  • 二值图像在MATLAB中以一个矩阵存储,矩阵中元素的取值为0(表示白)或1(表示黑).

    在这里插入图片描述

  • 灰度图像在MATLAB中以一个矩阵存储,矩阵中元素的取值介于0~255之间,表示灰度.

    在这里插入图片描述

  • 彩色图像在MATLAB中以三个矩阵存储,每个矩阵中元素的取值介于0~255之间,分别表示颜色R,G,B分量的浓度

    在这里插入图片描述

读取和展示图像

使用imread()函数将图像读取到内存中,使用imshow()函数展示图像,使用imwrite()函数将内存中的图像写进硬盘.

clear, close all I = imread('pout.tif'); % 将MATLAB自带图像'pout.tif'读取到内存中 imshow(I); % 在图形窗口展示该图像 imwrite(I,'myimage.png'); % 将该图像存为png格式的文件 

在这里插入图片描述

使用imageinfo()函数查看图片文件的详细信息.

imageinfo('pout.tif') 

在这里插入图片描述

使用imtool()函数可以打开图像处理工具.

 imtool('pout.tif') 

在这里插入图片描述

图像的运算

图像的点运算

图像在内存中以矩阵的形式存储,因此我们可以像遍历矩阵那样遍历并编辑图片上的像素点.MATLAB也内置了一些函数用于进行图像运算.

图像的四则运算

要对两个图像进行四则运算,要求这两个图像的尺寸相同.下面是常用的图像四则运算函数,具体细节请参考官方文档.

函数 作用
imabsdiff() 两个图像求差值
imadd() 一个图像加上另一个图像或常数
imsubtract() 一个图像减去另一个图像或常数
immultiply() 一个图像乘以另一个图像或常数
imdivide() 一个图像除以另一个图像或常数
imcomplement() 对图像取反
I=imread('rice.png'); subplot(1,2,1); imshow(I); J=immultiply(I, 1.5); subplot(1,2,2); imshow(J); 

在这里插入图片描述

I=imread('rice.png'); J=imread('cameraman.tif'); K=imadd(I,J); subplot(1,3,1); imshow(I); subplot(1,3,2); imshow(K); subplot(1,3,3); imshow(J); 

在这里插入图片描述

可以看到,进行加法操作后,得到的图像比原本的两个都亮,这是因为图像矩阵的数值整体上增加了.

像素的统计分布

使用imhist()函数可以分析像素值的统计分布.

I = imread('pout.tif'); imhist(I) 

在这里插入图片描述

使用histeq()可以增大图像的对比度,这本质上做了直方图的均衡化(Histogram Equalization)操作.

I = imread('pout.tif'); I2 = histeq(I); subplot(1,4,1); imhist(I); subplot(1,4,2); imshow(I); subplot(1,4,3); imshow(I2); subplot(1,4,4); imhist(I2); 

在这里插入图片描述

图像的二值化

将灰度图像变为二值图像的过程被称为二值化,MATLAB内置了两个与二值化相关的函数.

  • graythresh()函数用于计算二值化变换过程中的最优阈值(threshold).灰度图像上超过该阈值的点将被赋值为1,低于该阈值的点将被赋值为0.
  • im2bw()用于进行二值化变换.
I = imread('rice.png'); level=graythresh(I); bw=im2bw(I, level); subplot(1,2,1); imshow(I); subplot (1,2,2); imshow(bw) 

在这里插入图片描述

图像的几何变换

图像的几何变换本质上就是将图像乘以一个矩阵得到新图像的过程.

变换形式 图形示意 数学变换 MATLA命令
位移(Translation) 在这里插入图片描述 [ x ′ y ′ 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] ∗ [ x y 1 ] \left[\begin{array}{c} x’ \\ y’ \\ 1 \end{array}\right] =\left[\begin{array}{c} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{array}\right] * \left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] xy1=100010txty1xy1 imtranslate()
缩放(Scale) 在这里插入图片描述 [ x ′ y ′ 1 ] = [ s x 0 0 0 s y 0 0 0 1 ] ∗ [ x y 1 ] \left[\begin{array}{c} x’ \\ y’ \\ 1 \end{array}\right] =\left[\begin{array}{c} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{array}\right] * \left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] xy1=sx000sy0001xy1 imresize()
错切(Shear) 在这里插入图片描述 [ x ′ y ′ 1 ] = [ 1 h x 0 h y 1 0 0 0 1 ] ∗ [ x y 1 ] \left[\begin{array}{c} x’ \\ y’ \\ 1 \end{array}\right] =\left[\begin{array}{c} 1 & h_x & 0 \\ h_y & 1 & 0 \\ 0 & 0 & 1 \end{array}\right] * \left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] xy1=1hy0hx10001xy1
旋转(Rotate) 在这里插入图片描述 [ x ′ y ′ 1 ] = [ cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ 0 0 0 1 ] ∗ [ x y 1 ] \left[\begin{array}{c} x’ \\ y’ \\ 1 \end{array}\right] =\left[\begin{array}{c} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{array}\right] * \left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] xy1=cosθsinθ0sinθcosθ0001xy1 imrotate()
I = imread('rice.png'); J = imrotate(I, 35, 'bilinear'); subplot(1,2,1); imshow(I); subplot(1,2,2); imshow(J); size(I) % 得到 [256, 256] size(J) % 得到 [357, 357] 

在这里插入图片描述

可以看到,进行旋转变换后,图像的尺寸增加了.

使用MATLAB分析图像:目标计数

我们想要通过MATLAB分析rice.png图片中米粒的个数.

在这里插入图片描述

图像预处理

要分析图像中的米粒个数,我们需要对图像进行两步预处理:

  1. 去除图像的背景:
    I = imread('rice.png'); subplot(1,3,1); imshow(I); BG = imopen(I, strel('disk', 15)); subplot(1,3,2); imshow(BG); I2 = imsubtract(I, BG); subplot(1,3,3); imshow(I2); 

    在这里插入图片描述

  2. 对图像进行二值化:
    I2 = imsubtract(I, BG); level=graythresh(I2); bw2 = im2bw(I2, level); 

下面代码展示了是否去除背景对图像二值化结果的影响:

% 直接对图像进行二值化 I = imread('rice.png'); level=graythresh(I); bw = im2bw(I, level); subplot (1,2,1); imshow(bw); title('直接进行二值化'); % 去除背景后对图像进行二值化 BG = imopen(I, strel('disk', 15)); I2 = imsubtract(I, BG); level=graythresh(I2); bw2 = im2bw(I2, level); subplot(1,2,2); imshow(bw2); title('去除背景后进行二值化'); 

在这里插入图片描述

目标计数:标记连通区域

识别米粒个数的关键在于识别连通区域.

在这里插入图片描述

在这里,我们使用MATLAB自带的bwlabel()函数计算连通区域,该函数使用了连通区域标记算法,将每个连通区域内的像素点赋值为同一个值.

在这里插入图片描述

I=imread('rice.png'); BG=imopen(I, strel('disk', 15)); I2=imsubtract(I, BG); level=graythresh(I2); BW=im2bw(I2, level); [labeled, numObjects]=bwlabel(BW, 8); 

得到labeled为标记好的矩阵,其尺寸与原图片相同,每个连通区域都被赋值为一个相同的整数,其他区域被赋值为0.numObjects为计算出的连通区域个数,为99.

使用label2rgb()函数可以将标记结果以彩色图片的形式展示

RGB_label=label2rgb(labeled); imshow(RGB_label); 

在这里插入图片描述

分析检测结果

使用regionprops()函数可以将检测结果封装成结构体数组.

graindata = regionprops(labeled, 'basic'); graindata(51) 
 Area: 155 Centroid: [112.4258 245.8645] BoundingBox: [108.5000 234.5000 8 22] 

使用bwselect()函数可以交互式选择连通区域

ObjI = bwselect(BW); imshow(ObjI); 

在这里插入图片描述

pdf版本笔记的下载地址: MATLAB06_数字图像处理(访问密码:3834)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232014.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • header中Content-Disposition的作用

    header中Content-Disposition的作用

    2021年9月22日
    84
  • Cmake的使用

    Cmake的使用vscodeCmake简介Cmake语法重要指令和CMake常用变量重要指令CMake常用变量CMake编译工程CMake代码实践CMake完整项目调试步骤launch.json和tasks.jsonCmake简介简介CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。CMake可以说已经成为大部分C++开源项目标配传统的C++文件不通系统对应不通的编译比如 当添加一个文件的时候需要对不通操作系统中的工程进行修改有了Cmake以后,只需要编写

    2022年8月9日
    1
  • java applet介绍,Java Applet教程介绍[通俗易懂]

    java applet介绍,Java Applet教程介绍[通俗易懂]Applet是一种特殊类型的程序,嵌入在网页中以生成动态内容。它在浏览器中运行,并在客户端运行。小程序的优势小程序有很多优点。它们如下:它在客户端工作,因此响应时间更少。担保的它可以由在许多平台下运行的浏览器执行,包括Linux,Windows,MacOs等。小程序的缺点客户端浏览器需要插件才能执行applet。你知道吗小程序的层次结构如上图所示,Applet类扩展了Panel。…

    2022年7月7日
    18
  • SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

    SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤

    2022年2月18日
    65
  • sql server 备份还原_什么是SQL

    sql server 备份还原_什么是SQL1、动手备份2、动手还原3、T-SQL语句备份及还原BACKUP DATABASERESTORE FILELISTONLY FROM DISK代码示例– 打开设置当前数据库use mastergo– 默认创建数据库create database SQLDBgo– 打开设置当前数据库use SQLDBgoSQLDB– 在当前数据库创建表creat…

    2022年8月18日
    7
  • MOS管相关知识

    MOS管相关知识mos管相关知识

    2022年6月21日
    66

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号