• 数字图像处理实验(一)|图像的基本操作和基本统计指标计算


    一、实验目的

    (1)熟悉MATLAB图像处理工具箱的基本使用方法。在掌握MATLAB基本操作的基础上,依靠图像处理工具箱验证和设计图像处理算法。
    (2)了解计算图像的统计指标的方法及其在图像处理中的意义。
    (3)了解图像的几何操作,如改变图像大小、剪切、旋转等。

    二、实验主要仪器设备

    (1)台式计算机或笔记本电脑。
    (2) MATLAB (安装了图像处理工具箱,即Image Processing Toolbox (IPT))。
    (3)典型的灰度、彩色图像文件。

    三、实验原理

    (1)将一幅图像视为一个二维矩阵。

    (2)利用MATLAB图像处理工具箱读、写和显示图像文件。

    ①调用imread函数将图像文件读入图像数组(矩阵)。
    其基本格式为: A= imread(filename, fmt);
    例如:A=imread(‘lena’,’jpg’);
    常用简化格式为:
    例如:A= imread(‘lena.jpg’);
    其中,A为二维数组,filename 为文件名,fmt 为图像文件格式的扩展名。

    ②调用imwrite函数将图像矩阵写入图像文件。
    其基本格式为: imwrite(A,filename,fmt);
    例如:imwrite(A,‘test_image’,’jpg’);
    常用简化格式为:
    例如:imwrite(A,‘test_image.jpg’);
    ③调用imshow函数显示图像。
    例如:imshow(‘tire.tif’);
    其基本格式为: imshow(I,N)
    其中,I为图像矩阵,N为显示的灰度级数,默认时为256。

    (3)计算图像的有关统计参数。

    图像的统计特征主要有:
    ①图像大小:
    size(I);返回值为图像的行与列
    numel(I):返回值为图像像素总个数(矩阵元素个数)
    ②图像的灰度平均值(均值):
    在这里插入图片描述

    即一幅图像的平均灰度(亮度)。
    调用函数:mean2(I)
    ③图像的灰度标准差(standard deviation):
    在这里插入图片描述
    调用函数:std2(I)
    ④图像的方差(variance)
    求解图像方差有两种方法:
    第一种:
    调用函数:var;
    注意:var函数是对一维数组求方差,因此对图像求方差需要把图像对应的二维矩阵转换为一维。例如:V=var(I(😃);
    第二种:
    先求标准差,然后进行平方,即:p=std2(I);V=p^2。
    ⑤相关系数(correlation coefficient)
    判断两幅图之间的相关程度。
    调用函数:corr2(A,B);
    值越大,说明两幅图像的相关性越高,反之亦然。
    ⑥获取图像信息
    调用函数:imfinfo(FILENAME);

    (4)改变图像尺寸、旋转图像、裁剪图像

    改变尺寸函数:imresize(I,[m n]); %用m,n指定新尺寸(m行,n列)
    imresize(I,n);% n为倍数
    旋转图像函数:imrotate(I,angle); % angle为角度
    裁剪函数图像:imcrop(I,[a b c d]);% a,b为新图像原点在原图像中的坐标,c,d为新图像的宽度和高度(长或宽)
    练习1:A=[1 2 3 4 5 6;
    7 6 5 4 3 2;
    5 6 7 8 9 0;
    4 3 2 5 7 6;
    6 5 4 3 2 1;]
    B=imcrop(A,[2 2 3 2]);

    四、实验内容

    (1)用imwrite写入图像

    练习:
    A=[1 1 1;0 0 0;1 0 1];%创建矩阵
    imwrite(A,‘wan.bmp’);%将矩阵写入当前工作空间
    B=imread(‘wan.bmp’);%读取
    imshow(B);
    实验题:
    生成单位矩阵,将其写入当前路径并显示。
    报告总结:
    写出此矩阵被写入的位置(路径);图像的类型(扩展名);A的数据类型和B的数据类型。

    (2) 用imread读入一幅图像(自选),并通过imfinfo函数获取图像文件的基本信息,将基本信息用语言文字进行描述并写在报告册(帮助理解)。

    (3)读取安装文件中的‘onion.png’,首先将其转换为灰度图片,然后利用“像素和统计处理”函数分别获取:

    ①灰度图像的大小、总像素个数、均值和方差。
    ②原彩色图像的大小、总像素个数、总均值及各颜色分量的均值。
    各颜色分量均值求解参考如下:
    R=mean2(I(:,:,1)) %红色的均值
    G=mean2(I(:,:,2)) %蓝色的均值
    B=mean2(I(:,:,3)) %绿色的均值
    分析总结(体现在报告中):
    原彩色图像和灰度图像的大小、总像素个数之间的关系;
    行数和列数相乘是灰度图总像素的大小,而原彩色图是行数和列数相乘的三倍
    彩色图像的总均值和三个颜色分量均值存在什么关系:
    彩色图像三个颜色分量均值相加是总均值的三倍
    根据三个颜色分量的均值分析此图中颜色的配比大概情概况。
    绿色占比最高,蓝色其次,最少的是红色

    (4)读取一幅图像并对其进行改变图像尺寸、旋转图像不同角度以及裁剪的操作。

    ①对图像分别改为原图像的2倍和0.5倍;
    ②对图像分别按照顺时针和逆时针旋转不同的角度;
    ③对实验原理中的练习1进行运行,观察结果并给出结论(该函数在使用时的注意事项)。
    ④对本题读出的图像进行大小的裁剪(参数自己设置)并说明新图像的原点在原图像的坐标以及新图像的行与列。

    六、实验报告要求

    (1)列出上述图像处理的程序,展示处理效果图。
    (2)按要求写出相应总结。
    (3)撰写心得和体会(本实验中遇到的问题及解决方案,实验心得)。

    七、预习要求

    (1)了解MATLAB图像处理工具箱的基本功能。
    (2)了解图像基本指标特征的含义。

    八、实验代码展示

    %% (2)
    A  = imread('onion.png');
    
    imshow(A);
    
    % imwrite
    imwrite(A,'1.jpg')
    B = imread('1.jpg');
    
    % imshow
    imshow(A)
    
    %% (3)
    
    % 获取图像信息
    disp('获取图像信息')
    imfinfo('1.jpg')
    
    %% (4)
    B = rgb2gray(A);
    
    % 大小
    
    fprintf('原_size_行 = %d\n',size(A,1))
    fprintf('原_size_列 = %d\n',size(A,2))
    fprintf('原_总像素 = %d\n',numel(A))
    
    fprintf('灰_size_行 = %d\n',size(B,1))
    fprintf('灰_size_列 = %d\n',size(B,2))
    fprintf('灰_总像素 = %d\n',numel(B))
    % 平均值
    fprintf('灰_平均值 = %d\n',mean2(B))
    
    fprintf('R_平均值 = %d\n',mean2(A(:,:,1)))
    fprintf('G_平均值 = %d\n',mean2(A(:,:,2)))
    fprintf('B_平均值 = %d\n',mean2(A(:,:,3)))
    fprintf('总_RGB_平均值 = %d\n',mean2(A))
    C = im2double(B);
    fprintf('灰_方差 = %d\n',var(C(:)))
    
    %% (4)
    figure
    imshow(imresize(A,0.5))
    figure
    imshow(imresize(A,2))
    figure
    subplot(1,2,1)
    S = imrotate(A,90);
    imshow(S)
    subplot(1,2,2)
    S = imrotate(A,-90);
    imshow(S)
    
    % imcrop(I,[a b c d]);% a,b为新图像原点在原图像中的坐标,c,d为新图像的宽度和高度(长或宽)
    
    figure
    S = imcrop(A,[100 100 100 100]);
    imshow(S)
    
    %%
    I=imread('onion.png');
    F=fft2(I);
    F_shift=fftshift(F);
    figure;
       subplot(2,3,2),imshow(I);
       subplot(2,3,4),imshow(F);
       subplot(2,3,5),imshow(F_shift);
       subplot(2,3,6),imshow(log(abs(F)+1),[0,10]);
    
     I=imread('C:\Users\huawei\Desktop\lena.jpg');
    F=fft2(I);
    F_shift=fftshift(F);
    F_ishiet=ifftshift(F_shift);
    F_ifft=ifft2(F);
    figure;
       subplot(2,4,2.5),imshow(I);
       subplot(2,4,5),imshow(F);
       subplot(2,4,6),imshow(F_shift);
       subplot(2,4,7),imshow(F_ishiet);
       subplot(2,4,8),imshow(F_ifft);
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    九、实验图像

    在这里插入图片描述
    2.
    在这里插入图片描述
    在这里插入图片描述
    3.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    CSS 选择器的常见用法
    【超详细】7000字+24张图带你彻底弄懂线程池
    Python014--python中的logging日志模块
    【第一周】认识小程序
    IDEA的使用(二)快捷键 (IntelliJ IDEA 2022.1.3版本)
    qgis_core编译报错LNK2019 无法解析的外部符号或命令解决
    [Power Query] 日期和时间处理
    【编程之路】面试必刷TOP101:二分查找/排序(17-22,Python实现)
    无聊话语罢了
    Oracle Linux 7.9内核降级
  • 原文地址:https://blog.csdn.net/m0_52592798/article/details/128209078