数字图像处理习题(一)

文章目录

  • 数字图像处理习题(一)
    • 一、简答题
    • 二、编程题
      • 1. 图像处理
        • 1.1 图像导入、裁减显示(长宽分别为原尺寸1/2)、彩色图像灰度化、保存
      • 2. 图像采样与量化
        • 2.2 利用求均值方法是实现4倍降采样
        • 2.3 手动编写量化函数,将灰度级改为8
      • 3. 图像变换
        • 3.1 手写图像反转
        • 3.2 非线性变换完成对数变换
      • 4. 直方图
        • 4.1 完成清华大学出版社教材例5.6,5.7
        • 4.2 手写函数替换imhist()
      • 5. 空域低通滤波
        • 5.2 图像分别添加椒盐噪声与乘性噪声,手写实现3 * 3窗口均值滤波与中值滤波,并比交两种方法在不同噪声下的去噪效果。提示:嵌套使用for循环语句

一、简答题

1. 什么是数字图像,数字图像有哪些特点

答:数字图像,是以二维数字组形式表示的图像,是二维图像用有限数字数值像素的表示。由数组或矩阵表示,其光照位置和强度都是离散的。数字图像是由模拟图像数字化得到的、以像素为基本元素的、可以用数字计算机或数字电路存储和处理的图像。

​ 数字图像特点:处理的信息多数为二维信息,运算量巨大;各个像素互不独立,相关性大;数字图像占用的频带较宽。

2. 若RGB图像中每一幅红、绿、蓝都是一幅8bit图像,则该RGB图所有可能的颜色总数是多少?

答:16777216种。

​ 每幅红、绿、蓝图像都是一幅8bit图像,则每个RGB颜色色值有2^8= 256个(0-255)。所以该RGB图所有可能的颜色总数为(28)3 = 16777216。

二、编程题

1. 图像处理

1.1 图像导入、裁减显示(长宽分别为原尺寸1/2)、彩色图像灰度化、保存

  • 编程思路:

    (1)图像导入:使用 imread()函数将图像读入工作区。

    (2)剪裁(长宽分别为原尺寸1/2):首先使用size()获取图像的长宽并储存,用rect[x,y,length,width]设置参数,从某个有效的x、y坐标开始裁剪1/2的宽和高的尺寸。

    (3)显示:使用imshow()函数来显示图像文件,为了同时显示不同窗口的多幅图像,使用figure()函数。

    (3)彩色图像灰度化:将3个通道(RGB)转换成1个通道,可以直接使用rgb2gray()函数。

    (4)保存: 使用函数imwrite()来写入图像文件。

  • 源代码:

    文件名:Homework1_1.m

    close all;
    clear;
    clc;
    img = imread('test.jpg');                 %读取test图片(为三通道彩色图片)
    figure,imshow(img),title('原图');          %显示原图hight=size(img,1);                         %获取图像高
    width=size(img,2);                         %获取图像宽
    rect = [width/4,hight/4,width/2,hight/2];  %设置参数,从1/4的x,y坐标开始延长1/2的宽高%即图像中心区域
    imgCut=imcrop(img,rect);                   %对图片img进行rect的参数裁剪,命名为imgCut
    imwrite(imgCut,'testCut.jpg')              %将灰度化后图片保存,命名为testCut.jpg
    figure,imshow(imgCut),title('裁剪后图');    %显示裁剪后的图片imgGray = rgb2gray(img);                   %将RGB图片转换为灰度图片
    imwrite(imgGray,'testGray.jpg')            %将灰度化后图片保存,命名为testGray.jpg
    figure,imshow(imgGray),title('灰度化图');   %显示灰度化后的图片%显示在一个窗口 对比结果
    figure;
    subplot(1,3,1),subimage(img);
    title('原图');
    subplot(1,3,2),subimage(imgCut);
    title('裁剪后图');
    subplot(1,3,3),subimage(imgGray);
    title('灰度化图');
    
  • 结果:

  • 分析:

    (1) 裁剪:一开始使用近似正方形比例的图片,实验结果不清晰,使自己反而开始对于宽高,长宽定义混淆。最后更换测试图片,验证。长宽即宽高。
    获得图像宽高,使用size()函数。size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数(高)或列数(宽)。
    参数格式为:rect[x,y,length,width]

    (2)对于图像灰度化:rgb2gray是matlab内部一种处理图像的函数,通过消除图像色调和饱和度信息同时保留亮度实现将将RGB图像或彩色图转换为灰度图像,即灰度化处理的功能。调用这个功能的格式是I = rgb2gray(RGB),意思是将真彩色图像RGB转换为灰度强度图像I 。

    (3) 图片保存:使用函数imwrite()来写入图像文件。

    (4)显示:使用imshow()函数来显示图像文件。为方便观察实验结果最后将结果与原图放在一个窗口。用subplot()函数,该函数的语法形式为subplot(m,n,p)subplot(m n p)。其中,m表示图排成m行,n表示图排成n列,p表示图所在的位置,p=1表示从左到右、从上到下的第一个位置。

2. 图像采样与量化

2.2 利用求均值方法是实现4倍降采样

  • 编程思路:

    (1)用imread()函数将图像信息转化为矩阵信息进行保存,由于图像为RGB三色,所得到的信息是三维的,因此先使用rgb2gray()函数将图像转化为二维的灰度图。

    (2)[high,width]=size(a)读取图像像素,采样for循环,步长为2,将四个像素点的值求均值后赋值给新的图片,最后现实图像。

  • 源代码:

    文件名:Homework2_2.m

    %利用求均值方法实现4倍降采样
    close all;
    clear;
    clc;
    img=imread('学院.jpg');            %读取原图
    img=rgb2gray(img);                %转变为灰度化图像
    [h,w]=size(img);                 %获取高宽
    newImg=zeros((h+1)/2,w/2);        %新建一个长宽为原图一半的全零矩阵
    l=1;r=1;
    for i=1:2:h-1;                    %对原图行进行遍历,步长为2for j=1:2:w-1;                %对原图列进行遍历,步长为2newImg(l,r)=(img(i,j)+img(i+1,j)+img(i,j+1)+img(i+1,j+1))/4;r=r+1;endl=l+1;r=1;
    end
    newImg = uint8(newImg);           %图像矩阵变成uint8型
    figure;
    subplot(1,2,1),imshow(img),title('原图');
    subplot(1,2,2),imshow(newImg),title('4倍采样图');
    
  • 结果:

  • 分析:

    (1)实验所得到的四倍降采样图片的像素数量是原图的1/4,因此需要将新图的宽高设置为原图的1/2。

    (2)求均值法实现降采样需要将原图临近的四块像素的灰度值求均值。使用for循环。

    (3)每步步长为2将原图依次遍历。

2.3 手动编写量化函数,将灰度级改为8

  • 编程思路:

    (1)首先用imread()函数将图像信息转化为矩阵信息进行保存,由于图像为RGB三色,所得到的信息是三维的,因此先使用rgb2gray()函数将图像转化为二维的灰度图。

    (2)通过灰度直方图得出灰度值范围,利用线性变换将其转换为灰度级为8的图像(灰度值为0-255)。

  • 源代码:

    文件名:Homework2_3.m

    %手动编写量化函数,将灰度级改为8
    close all;
    clear;
    clc;
    img=imread('学院.jpg');   %读取原图
    img=rgb2gray(img);        %转变为灰度化图像
    imged=img/7*(0+255/7);    %转变为灰度级为8的图像subplot(2,2,1),imhist(img),title('灰度直方图');
    subplot(2,2,2),imshow(img),title('原灰度图像');
    subplot(2,2,3),imhist(imged),title('灰度直方图');
    subplot(2,2,4),imshow(imged),title('灰度级为8');
    
  • 结果:

  • 分析:

    关于灰度级:灰度值范围[Lmin,Lmax]内就有K个亮度值对应,称为灰度级K。为方便计算机处理,灰度级K一般以2的整数次幂表示,一般取K=256,表示共有256个灰度级。

    为了实现灰度级8的转变,因此需要8个亮度值,把0-255灰度值均匀分成2^3=8份,即为8个灰度级。第一区间赋值为0,第八区间赋值为255,中间区间以此类推。

    设灰度级为k,imged=img/(k-1)*(0+255/(k-1));

3. 图像变换

3.1 手写图像反转

  • 编程思路:

    (1)首先用imread()函数将图像信息转化为矩阵信息进行保存,由于图像为RGB三色,所得到的信息是三维的,因此先使用rgb2gray()函数将图像转化为二维的灰度图。

    (2)将图像转换为double型,图像反转线性变换后再将数据类型转换为uint8数据类型,显示图片。
    (3)灰度值为0-255,反转则为img1=255-img1

  • 源代码:

    文件名:Homework3_1.m

    %图像反转:手写
    close all;
    clear;
    clc;
    img=imread('学院.jpg');   %读取原图
    img=rgb2gray(img);        %转变为灰度化图像
    img1=double(img);         %图像矩阵变成double型
    img1=255-img1;            %图像反转
    img2=uint8(img1);         %图像矩阵变成uint8型
    subplot(1,2,1),imshow(img),title('原始灰度图像');
    subplot(1,2,2),imshow(img2),title('反转灰度图像');
    
  • 结果:

  • 分析:

    图像反转,“白变黑,黑变白”,因为灰度值范围为0-255,反转则为:现值=255-原值。

3.2 非线性变换完成对数变换

  • 编程思路:

    (1)用imread()函数将图像信息转化为矩阵信息进行保存,由于图像为RGB三色,所得到的信息是三维的,因此先使用rgb2gray()函数将图像转化为二维的灰度图。

    (2)把二维的灰度图矩阵转换为double型之后进行对数变换,最后转换为uint8类型显示。

  • 源代码:

    文件名:Homework3_2.m

    %非线性变换:完成对数变换
    close all;
    clear;
    clc;
    img=imread('学院.jpg');   %读取原图
    img=rgb2gray(img);        %转变为灰度化图像
    img1=double(img);         %图像矩阵变成double型
    img2=46*log(img1+1);      %对数变换
    img2=uint8(img2);         %图像矩阵变成uint8型
    subplot(1,2,1),imshow(img),title('原始灰度图像');
    subplot(1,2,2),imshow(img2),title('对数变换图像');
    
  • 结果:

  • 分析:

    原图经过非线性对数变换后,整体亮度变强。对数变换一般适用于处理过暗图像。

4. 直方图

4.1 完成清华大学出版社教材例5.6,5.7

  • 5.6 源代码:

    文件名:Homework4_1_6.m

    %例5.6 直方图均衡化
    Image=rgb2gray(imread('img.jpg'));            %读取原图转变为灰度化图像
    histgram=imhist(Image);                       %统计图像直方图
    [h,w]=size(Image);
    NewImage=zeros(h,w);
    s=zeros(256); s(1)=histgram(1);
    for t=2:256  s(t)=s(t-1)+histgram(t);                   %计算新的灰度值
    end
    for x=1:wfor y=1:hNewImage(y,x)=s(Image(y,x)+1)/(w*h);   %生成新图像end
    end
    subplot(2,2,1),imshow(Image),title('couple灰度图像');
    subplot(2,2,2),imhist(Image),title('couple灰度图像的直方图');axis tight;
    subplot(2,2,3),imshow(NewImage),title('直方图均衡化处理后的图像');
    subplot(2,2,4),imhist(NewImage),title('直方图均衡化处理后的图像的直方图');axis tight;
  • 5.7 源代码:

    文件名:Homework4_1_7.m

    %例5.7 局部直方图均衡化
    Image=rgb2gray(imread('img.jpg'));               %读取原图转变为灰度化图像
    histgram=imhist(Image);                          %统计图像直方图
    [h,w]=size(Image);
    NewImage=zeros(h,w);
    s=zeros(256); s(1)=histgram(1);
    for t=2:256s(t)=s(t-1)+histgram(t);                     %计算新的灰度值
    end
    for x=1:wfor y=1:hNewImage(y,x)=s(Image(y,x)+1)/(w*h);     %生成新图像end
    end
    subplot(1,4,1),imshow(Image),title('couple灰度图像');
    subplot(1,4,2),imhist(Image),title('couple灰度图像的直方图');axis tight;
    subplot(1,4,3),imshow(NewImage),title('直方图均衡化处理后的图像');
    subplot(1,4,4),imhist(NewImage),title('直方图均衡化处理后的图像的直方图');axis tight;
    
  • 结果:

    (1)例5.6

    (2)例5.7

  • 分析:

    (1)图像直方图均衡化和局部均衡化,可使图像灰度级均衡平坦。

    (2)直方图均衡化:原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,增加许多图像的局部对比度,亮度可以更好的在直方图上分布。

    (3)局部直方图均衡化:也就是对一个像素周围的区域进行直方图均衡化,然后将结果返还给最中心的区域,需要自己确定模板的大小,一般都是奇数行,奇数列,运算时间较长,且模板越大,运算时间越长。

4.2 手写函数替换imhist()

  • 编程思路:

    可以用循环遍历图片的每个像素,求出每个灰度值出现的次数,最终进行统计展示。

  • 源代码:

    文件名:Homework4_2.m

    %手写imhist()
    close all;
    clear;
    clc;
    Image=rgb2gray(imread('学院.jpg')); %读取原图转变为灰度化图像
    n=256;
    k=256/n;
    histograms(n)=0;
    for i=1:1:na=size(find(Image<=k*i))-size(find(Image<=k*(i-1)));histograms(i)=a(1);
    end
    subplot(1,2,1),imhist(Image);title('imhist()直方图');axis tight;
    subplot(1,2,2),bar(0:k:n*k-1,histograms,'grouped');title('手写代码灰度分布直方图');axis tight;
    
  • 结果:

  • 分析:

    (1)用循环遍历图片的每个像素,求出每个灰度值出现的次数,最终进行统计展示。

    (2)find函数返回原图I矩阵中等k值的下标,length计算下标的数量来表示频率.

5. 空域低通滤波

5.2 图像分别添加椒盐噪声与乘性噪声,手写实现3 * 3窗口均值滤波与中值滤波,并比交两种方法在不同噪声下的去噪效果。提示:嵌套使用for循环语句

  • 编程思路:

    (1)向灰度图像增加噪声。

    (2)获取图像高与宽,并新建新的图像矩阵,为了方便边界操作,将其高宽各增加2。

    (3)利用嵌套for循环对每一个像素点进行操作。

    (3)均值滤波:将该像素点周围包括其自己的3*3共九个灰度值求均值。

    ​ 中值滤波:将该像素点周围包括其自己的3*3共九个灰度值排序,取其均值。调用函数实现

  • 源代码:

    文件名:Homework5_2.m

    %图像分别添加椒盐噪声与乘性噪声
    %手写实现3 * 3窗口均值滤波与中值滤波
    close all;
    clear;
    clc;
    Image=rgb2gray(imread('img.jpg'));         %读取原图转变为灰度化图像
    ImageA1 = imnoise(Image,'speckle');        %加入乘性噪声,方差默认值
    ImageB1 = imnoise(Image, 'salt & pepper'); %加入椒盐噪声,噪声密度为0.02
    ImageA1 = double(ImageA1);
    ImageB1 = double(ImageB1);
    [h,w] = size(Image);
    ImageA2 = zeros(h+2, w+2);                 %乘性噪声均值滤波图像
    ImageA3 = zeros(h+2, w+2);                 %乘性噪声中值滤波图像
    ImageB2 = zeros(h+2, w+2);                 %椒盐噪声均值滤波图像
    ImageB3 = zeros(h+2, w+2);                 %椒盐噪声中值滤波图像for i=2:1:h-1for j=2:1:w-1% 均值滤波ImageA2(i,j)=(ImageA1(i-1,j-1)+ImageA1(i-1,j)+ImageA1(i,j-1)+ImageA1(i-1,j+1)+ImageA1(i+1,j-1)+ImageA1(i,j)+ImageA1(i,j+1)+ImageA1(i+1,j)+ImageA1(i+1,j+1))/9;ImageB2(i,j)=(ImageB1(i-1,j-1)+ImageB1(i-1,j)+ImageB1(i,j-1)+ImageB1(i-1,j+1)+ImageB1(i+1,j-1)+ImageB1(i,j)+ImageB1(i,j+1)+ImageB1(i+1,j)+ImageB1(i+1,j+1))/9;% 中值滤波ImageA3(i,j) = MedianFiltering(i,j,ImageA1); %跳转取中值的自定义函数:MedianFilteringImageB3(i,j) = MedianFiltering(i,j,ImageB1);end
    endsubplot(2,3,1),imshow(uint8(ImageA1)),title('加入乘性噪声后的图像');
    subplot(2,3,2),imshow(uint8(ImageA2)),title('乘性噪声均值滤波图像');
    subplot(2,3,3),imshow(uint8(ImageA3)),title('乘性噪声中值滤波图像');
    subplot(2,3,4),imshow(uint8(ImageB1)),title('加入椒盐噪声后的图像');
    subplot(2,3,5),imshow(uint8(ImageB2)),title('椒盐噪声均值滤波图像');
    subplot(2,3,6),imshow(uint8(ImageB3)),title('椒盐噪声中值滤波图像');
    

    文件名:MedianFiltering.m

    function mvalue = MedianFiltering(i,j,img)%将该像素周围3*3的灰度值存入一个数组x = [img(i-1,j-1),img(i-1,j),img(i-1,j+1),img(i,j-1),img(i,j),img(i,j+1),img(i+1,j-1),img(i+1,j),img(i+1,j+1)];y = sort(x);                            %将数组排序mvalue = y(4);                          %取中值
    end
    
  • 结果:


  • 分析:

    (1)椒盐噪声是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号脉冲强度引起的噪声,椒盐噪声用中值滤波比较好。

    原因是:

    • 椒盐噪声是幅值近似相等但是随机的分布在不同位置,图中既有污染的点,也有干净的点。

    • 图中噪声的均值不为零,所以不适合均值滤波。

    • 图中有干净的点也有污染的点,所以中值滤波可以用干净的点代替污染的点。

    (2)乘性噪声一般由信道不理想引起的。它们与信号的关系是相乘,信号在,噪声在;信号不在,噪声也就消失。乘性随机性看成是系统的时变性或者非线性造成的。乘性噪声普遍存在于现实世界的图像应用当中。

    • 从实验结果看均值滤波与中值滤波效果大差不差。

    • 它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

  • 分析:

    (1)椒盐噪声是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号脉冲强度引起的噪声,椒盐噪声用中值滤波比较好。

    原因是:

    • 椒盐噪声是幅值近似相等但是随机的分布在不同位置,图中既有污染的点,也有干净的点。

    • 图中噪声的均值不为零,所以不适合均值滤波。

    • 图中有干净的点也有污染的点,所以中值滤波可以用干净的点代替污染的点。

    (2)乘性噪声一般由信道不理想引起的。它们与信号的关系是相乘,信号在,噪声在;信号不在,噪声也就消失。乘性随机性看成是系统的时变性或者非线性造成的。乘性噪声普遍存在于现实世界的图像应用当中。

    • 从实验结果看均值滤波与中值滤波效果大差不差。

    • 它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

数字图像处理习题(一)相关推荐

  1. 数字图像处理习题(三)

    数字图像处理习题(三) 文章目录 数字图像处理习题(三) 一.编程题 1. 图像的形态学处理 1.1 完成清华大学教材例9.10.9.11.9.30 1.1.1 例9.10 基于MATLAB编程,打开 ...

  2. 冈萨雷斯数字图像处理(本科教学版)第三章课本习题全解matlab

    第三章频率域滤波 !!!首先本章需要定义的所有库函数代码如下 : 一 .库函数 !!!每个代码前面有相应的题目标号注释 !!可以分题目定义也全部可以一起定义,建议本章库函数及题目代码全部放到一个文件夹 ...

  3. 曹茂永《数字图像处理》第一章习题(部分)

    习题1.2,1.3 m邻接:是指两个像素要么处于4邻域(4邻接), 要么处于对角邻域且两像素的4邻域内没有相似灰度值. 如上面V={1,2},即说明1,2灰度值是相似的.从p出发到q,依次找相似的像素 ...

  4. 数字图像处理(第二版)许录平习题答案

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 之前在网上一直找数字图像处理第二版的答案,现在终于找到了,在下面的链接 https://mp.weixin.qq.com/s/b5ct ...

  5. matlab 霍特林变换,数字图像处理(第3版面向CS2013计算机专业规划教材)

    导语 内容提要 姚敏编著的<数字图像处理(第3版面向CS2013计算机专业规划教材)>详细介绍了数字图像处理的基本理论.主要技术和最新进展.全书共分13章,内容主要包括图像获取.图像变换. ...

  6. winpcap基本原理及常见应用_数字图像处理原理及应用教学大纲

    课程基本信息 课程代码:080706E3S3004 学 分 数:3学分 学 时 数:48学时(讲课36,实验12) 课程类别:专业方向课.必修课 开课学期:6学期 主讲教师:陈天华 修订日期:2020 ...

  7. 数字图像处理应用matlab,数字图像处理与应用(MATLAB版)

    第 1章 绪论 1n 1.1 图像的概念 1n 1.2 图像的分类 2n 1.3 图像的表示 2n 1.3.1 图像信号的表示 2n 1.3.2 数字图像的表示 3n 1.3.3 颜色模型 4n 1. ...

  8. 大学生学图像处理计算机要求,重点大学计算机教材:数字图像处理

    重点大学计算机教材:数字图像处理 语音 编辑 锁定 讨论 上传视频 <重点大学计算机教材:数字图像处理>是2012年机械工业出版社出版的图书,作者是姚敏.[1] 书    名 重点大学计算 ...

  9. 《数字图像处理》题库5:计算题 ①

    前言 这是我在学习数字图像处理这门课程时,从网络上以及相关书籍中搜集到的一些题目, 这些题目主要是针对期末考试的. 做题之前你需要注意以下几点: 这篇文章整理了第5种题型,即计算题,为了避免篇幅过长, ...

最新文章

  1. C语言结束输入(两种方法)
  2. Runtime初学习
  3. java bindview_手写 ButterKnife BindView
  4. ES6中表达export default const是无效的
  5. smartform 中currency 字段的小数点问题
  6. 一场性能当道 优化为王的沙龙盛宴
  7. java 中符号_谁能告诉我java中符号的用法,见代码
  8. 第62课 捉迷藏 《小学生C++趣味编程》
  9. Canvas--圆弧和圆
  10. 高中信息技术——Flash动画制作刷题点整理(二)
  11. 九位名人美到极致的句子。读这样的句子,是一种享受。
  12. 使用this.$refs.XXX修改某个元素样式并添加点击事件
  13. 计算机类毕业设计评阅书评语,本科毕业论文专家评阅评语
  14. 思科交换机接口配置trunk_cisco二层交换机和三层交换机怎么设置trunk
  15. VINS-MONO边缘化策略
  16. 自学Java之基础篇——使用switch,输出今天到底是礼拜几(case的穿透)
  17. Keycloak授权服务指南
  18. java security 详解_Spring Security Remember me使用及原理详解
  19. 计算字符串长度的五种方法
  20. 怎么免费把pdf转换成jpg图片

热门文章

  1. restful什么意思_RESTful的真正含义是什么?
  2. 戴尔EMC服务器重装系统
  3. 网上书店后台管理系统UI界面分享
  4. 【记录】嵌入式经典通信UART理解
  5. 查看Windows凭据存储密码的方法 2022亲测有效
  6. 将Maven配置到Eclipse中
  7. 学习opengl官方指南 01 opengl介绍
  8. oracle修改open_cursors,oracle的open_cursors问题探究
  9. Problem L 七段显示器显示整数
  10. 新闻/媒体 发布接口定制_每日新闻摘要,19/4/14:老大哥在看