• Matlab数字图像处理 01 图像数据的表示与基本运算


    1.1 读取和显示图像文件

    clear;
    clc;
    %读一张彩色图像存在 i 
    i = imread('lena.jpg');
    %将彩色图像转换为灰度图像
    igray = rgb2gray(i);
    %把灰度图像保存为.jpg文件
    imwrite(igray,'lena_gray.jpg');
    % 显示变量i中的彩色图像,并为窗口添加标题
    figure;imshow(i);
    title('原始彩色图像');
    %在新窗口中显示变量igray中表示的灰度图像,并为窗口添加标题
    figure;imshow(igray);
    title('转化后的灰度图像');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.2 图像类型与图像数据

    在这里插入图片描述

    1.2.1 RGB真彩色图像

    Matlab中用 M×N×3 的三维数组保存RGB真彩色图像数据。
    在这里插入图片描述

    改写彩色图像像素的RGB值

    % 1.2 改写像素的RGB值
    clear;
    clc;
    %查看一张彩色RGB image的信息
    fileinfo = imfinfo('lena.jpg'); % 在命令行窗口中运行
    i = imread('lena.jpg'); 
    %%
    i1 = i; % 将Image 信息复制到变量i1中
    % 对像素 R  G  B 三个分量重新赋值,改变其颜色 lena.jpg 474*474*3 随便找一个点
    i(200,200,1)=255;i(200,200,2)=0;i(200,200,3)=0;
    %将修改后前后的两张图并排显示
    figure; montage({i1,i});title('左侧为原始image|右侧为更改像素RGB分量后');
    %%
    %以像素(3060)为起点画 宽6100的水平红线
    i(30:35,60:159,1)=255;
    i(30:35,60:159,2)=0;
    i(30:35,60:159,3)=0;
    %以像素(5060)为起点画 宽6100的水平绿线
    i(50:55,60:159,1)=0;
    i(50:55,60:159,2)=255;
    i(50:55,60:159,3)=0;
    %以像素(70,60)为起点画 宽6100的水平蓝线
    i(70:75,60:159,1)=0;
    i(70:75,60:159,2)=0;
    i(70:75,60:159,3)=255;
    
    i2 = i(200:220,300:350,:);
    i(100:120,200:250,:)= i2;  % 复制一部分
    i = insertShape(i,'circle',[130,150,50],'LineWidth',5,'Color','yellow');
    figure;
    imshow(i);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    1.2.2 索引图像

    索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值“直接映射”为调色板数值。

    • 一个M×N二维数组,用于保存每个像素的颜色索引值
    • 一个P×3二维数组,用于保存颜色映射表colormap,即像素颜色索引值所对应的颜色RGB分量
    clear;
    clc;
    % 将RGB图像转换为索引图像 [i1,map]=rgb2ind(i,8,'nodither');
    i = imread('index.jpg');
    [i1,map]=rgb2ind(i,8,'nodither');
    %显示结果
    figure;imshow(i);title('RGB彩色图像OriginalRGBimage');
    %显示转换后的索引图像,仔细比较二值之间的差异
    figure;imshow(i1,map);title('索引图像Indexdimage');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    在这里插入图片描述

    clear;
    clc;
    [X,map]=imread('trees.tif');%读入一幅彩色索引图像
    %显示图像figure;
    imshow(X,map);title('索引图像Indexdimage');
    %把索引图像转换为RGB彩色图像
    Irgb=ind2rgb(X,map);
    %显示得到的彩色图像
    figure,imshow(Irgb);title('ConvertsindexedimagetoRGBimage');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.2.3 灰度图像

    灰度图像描述像素的灰度值(强度值、亮度值),Matlab中用一个M×N二维数组保存灰度图像数据。
    RGB图像转换为灰度图像

    % 1.2.3 灰度图像
    clear;
    clc;
    i = imread('lena.jpg');
    %把彩色图像转换为灰度图像
    i1=rgb2gray(i);
    %采用MATLAB向量运算方法实现彩色灰度图像转换
    %将数据类型由uint8转换为double
    id=double(i);
    i2=0.299*id(:,:,1)+0.587*id(:,:,2)+0.114* id(:,:,3);
    %将数据类型由double转换为uint8
    i2=uint8(i2);
    figure; montage({i1,i2});title('左侧为rgb2gry转化   |  右侧为MATLAB向量运算方法得到');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Matlab 向量运算方法
    在这里插入图片描述

    在这里插入图片描述

    1.2.4 二值图像

    二值图像(binaryimage)的每个像素值只能取两个离散值之一,这两个离散值一个代表“黑”、另一个代表“白”,真正是“非黑即白”,也可将二值图像看作特殊的灰度图像。
    灰度图像转换为二值图像

    % 1.2.3 灰度图像
    clear;
    clc;
    i = imread('lena.jpg');
    %把彩色图像转换为灰度图像
    i1=rgb2gray(i);
    %采用MATLAB向量运算方法实现彩色灰度图像转换
    %将数据类型由uint8转换为double
    id=double(i);
    i2=0.299*id(:,:,1)+0.587*id(:,:,2)+0.114* id(:,:,3);
    %将数据类型由double转换为uint8
    i2=uint8(i2);
    %将灰度图像转换为二值图像
    i3 =imbinarize(i1);
    %将原始彩色图像i 、 灰度图像 i2 、 二值图像i3在同一窗口中显示
    figure;
    subplot(1,3,1);imshow(i);title('RGB彩色图像');
    subplot(1,3,2);imshow(i1);title('灰度图像');
    subplot(1,3,3);imshow(i3);title('二值图像');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    1.2.5 视频图像

    视频图像是一组内容连续渐变的图像序列,视频中每幅图像称为帧(frame),每秒显示的图像帧数称为帧率(framerate,fps-framespersecond)。
    视频文件的读取与图像帧抽取

    % 视频文件的读取与图像帧抽取
    clear;
    clc;
    vedio = VideoReader("romantic.mp4");
    fps = vedio.FrameRate; %获取视频帧率
    fprintf('fps=%d',fps); %显示输出视频帧率 
    %读取视频文件中的每一帧图像并显示
    while(hasFrame(vedio))
        vidFrame=readFrame(vedio);%从视频文件中读取一帧图像
        imshow(vidFrame,'Border','tight');%显示该帧图像
        pause(1/fps);%暂停指定时间,按帧率播放
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Summary
    在这里插入图片描述

    1.3 图像的数字化

    来自场景的光线,经相机光学镜头会聚后形成光影像,投射到图像传感器的靶面上,这个光影像本质上是一种时间和空间连续的二维光能量分布。为了把这个光影像转换成计算机可以操作的数字图像,需经过 空间采样、时间采样、像素值量化 三个主要步骤。

    图像是一种特殊的二维信号,可以用二元函数 f (x,y) 表示。其中,灰度图像灰度图像可定义为一个二维函数f(x,y),这里x和y是定义域为平面的空间坐标,而在任何一对空间坐标(x,y)上的函数值(幅值)称为该点图像的强度(intensity)或灰度(grayscale)。

    模拟图像与数字图像

    模拟图象: 如果图像f(x,y)定义域(x,y)和值域均为连续值时,称其为模拟图像。
    数字图像: 如果图像f(x,y)的定义域(x,y)和值域均为有限的离散数值时,称其为数字图像。

    1. 空间采样
      要想不失真地重构图像,采样频率应该大于等于模拟信号频谱中最高频率的2倍,即必须香农满足采样定理。
      采样间隔的大小选取要依据原图像中包含的细微浓淡变化来决定。一般,图像中细节越多,采样间隔应越小。
    2. 时间采样
      时间采样,也就是通常所说的曝光。曝光时间是指从快门打开到关闭的时间间隔,在这段时间内,视场内物体可以在图像传感器靶面上留下光影像。
    3. 像素值量化
      图像传感器把每个光电转换单元在曝光时间内所累积的电荷量,变换为对应电压值,然后经模数转换器(A/D转换器)量化为有限范围的整数,例如,采用8位无符号整数,量化后的像素值大小范围在0~255之间,共有256个灰度级。

    **空间分辨率:**是图像中可辨别的最小细节的度量,依赖于成像面阵传感器的有效像素数,像素数越多,对细节的分辨和捕捉能力就越强,图像就越清晰。当然分辨率只是影响图像清晰度的重要因素之一。
    **灰度分辨率:**是灰度图像像素明暗程度可分辨的最小变化,或彩色图像像素彩色分量强弱可分辨的最小变化。
    在这里插入图片描述

    1.4 图像的坐标系

    在这里插入图片描述
    一张image 可以用一个M×N 的二维数组表示,为描述每个像素在图像平面上的位置,建立通用的笛卡尔坐标系。其中选取左上角为坐标原点,轴垂直向下、对应数组行序,y轴水平向右、对应数组列序。
    但是MATLAB约定图像坐标系缘点为图像左上角,x轴水平向右、对应数组列序,y轴垂直向下、对应数组行序。

    示例:图像几何变换-旋转变换

    % 图像几何变换-旋转变换
    clear;
    clc;
    i = imread('lena.jpg');
    i1 = imrotate(i,40,'bilinear','crop');%绕图像中心逆时针旋转40
    %在同一窗口中显示旋转前、后的图像
    figure;imshowpair(i,i1,'montage');title('原图像(左)|逆时针旋转结果(右)');
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    1.5 图像的基本运算

    在这里插入图片描述

    1.6 像素之间的位置关系

    为便于界定参与运算的像素集合,常用“邻域”(neighborhood)描述像素之间的位置关系。假定某一像素p的坐标为(x,y),其邻域是指以坐标(x,y)为中心的一组相邻像素构成的集合。如:4-邻域、4-对角邻域、8-邻域、m×n矩形邻域等。
    在这里插入图片描述

    1.7 Matlab中图像处理常用工具箱

    Matlab官网
    在这里插入图片描述

  • 相关阅读:
    csapp-Machine-Level Representation of Program-review
    Maven依赖管理项目构建工具(保姆级教学---下篇)
    Redis数据结构的奇妙世界:一窥底层存储机制【redis第一部分】
    JAVA多线程技术-线程的生命周期
    liunx 搭建 zookeeper
    API自动化测试
    平均回复在5s内的快捷短语
    玩转云端 | 天翼云对象存储ZOS高可用的关键技术揭秘
    2.X版本又一个极端情况下的偶现严重问题
    Linux TCP/IP内核参数调优,网络高延迟大吞吐。
  • 原文地址:https://blog.csdn.net/weixin_41022048/article/details/127416802