• 数字图像处理笔记与体会(二)——打开和显示图像


      最近事情太多,比较忙,现在快五一了,赶紧记录一下。前面第一节讲了一些matlab的基础,这里着重讲一下图像的读入和显示

      1、多张图显示

    这里的显示代码如下,在同一个窗口中,同时显示多幅图像,这个在第一节的博客里面也讲过了,这里就当做是复习,不进行展开叙述。

    close all ;
    clear all ;
    clc ;
    RGB1=imread('F:/图像处理/Hydrangeas.jpg');%读入图像
    RGB2=imread('F:/图像处理/Koala.jpg');%读入图像
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
    set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
    figure;
    subplot(121), imshow(RGB1);%显示图片,两行一列,第一幅
    subplot(122), imshow(RGB2);%显示图片,两行一列,第二幅

    得到的效果如下所示:

       2、手动灰度转二值

       在第一节中,我们通过二值化函数把灰度图像转换成二值化图像,这里我们通过显示的方式,直接进行二值化,代码如下所示:

    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Koala.jpg');%读入图像
    gray=rgb2gray(RGB);%得到灰度图
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
    set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
    figure;
    subplot(121), imshow(gray);%显示图片,两行一列,第一幅
    subplot(122), imshow(gray,[50,70]);%显示图片,两行一列,第二幅

       这里解释一下最后一行代码,[50,70]的意思是:在gray的颜色表中,50以下的变为0(也就是变黑),70以上的变为1(或者255)也就是(变为白),然后在这两者之间的保持不变。得到的效果如下所示:

     

     

      3、显示有标尺的多个图像

    前面的显示都是没有标尺,下面就进行有标尺的图像显示,代码如下:

    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Koala.jpg');%读入图像
    gray=rgb2gray(RGB);%得到灰度图
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
    set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
    figure;%打开一个窗口,用来显示(多幅)图像
    subplot(221), imshow(gray);%显示图片,两行两列,第一幅
    subplot(222), image(gray);%显示图片,两行两列,第二幅
    subplot(223), image([50,100],[50,120],gray);%显示图片,两行两列,第三幅
    subplot(224), imagesc(gray,[100,250]);%显示图片,两行两列,第四幅

    在这里,我们使用了image和imagesc这两个显示函数,下面来说明一下简单用法:

      image(gray):默认情况下就有了标尺,显示灰度图像。

      image([50,100],[50,120],gray):更改标尺的数值,[50,100]的意思是横坐标为50到100;[50,120]的意思是纵坐标为50到120.

      imagesc(gray,[100,250]):这里改的就不是标尺了,而是图像拉伸后的图像,也就是类似于灰度图像转换成二值化的阈值范围。需要说明的是,由于这个的标尺没有改变,而是进行灰度拉伸(相当于二值化转换),因此这里使用的是默认的尺度。需要改标尺的话,则需要像前面那样修改:imagesc([50,100],[50,120],gray,[100,250])。

      效果如下所示:

      4、标尺的变化

      这里我们将另外一种标尺进行度量图片,在图片灰度化后进行二次滤波实现边沿检测(滤波与边沿检测我们在后面会学习),分别进行图像外标尺和图像内标尺,代码如下所示:

    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Koala.jpg');%读入图像
    gray=rgb2gray(RGB);%得到灰度图
    H=[1 2 1 ; 0 0 0 ; -1 -2 -1];%设置sobel算子
    X=filter2(H,gray);%对图像进行二次滤波,实现边沿检测
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
    set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
    figure;%打开一个窗口,用来显示(多幅)图像
    subplot(131), imshow(gray);%显示图片,一行三列,第一幅
    subplot(132), imshow(X,[]),colorbar();%显示图片,一行三列,第二幅
    subplot(133),imshow(X,[]),colorbar('east');%显示图片,一行三列,第三幅

      这里我们队sobel算子和滤波不进行说明,我们这里只关注显示,这里使用了colorbar函数进行显示标尺,注意,这个函数不是imshow的选项,因此要放在imshow的外面。east的选项则说明标尺放在图片里面的east方向。效果如下所示:

      5、另外一个函数sbuimagie——显示同一窗口显示多幅带标尺的彩色图

      这里介绍另外一个显示函数,显示同一窗口显示多幅带标尺的彩色图,代码如下:

    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Koala.jpg');%读入图像
    RGB1=imread('F:/图像处理/Hydrangeas.jpg');
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
    set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
    figure;%打开一个窗口,用来显示(多幅)图像
    subplot(121), image(RGB);%显示图片,一行两列,第一幅
    subplot(122), image(RGB1);%显示图片,一行两列,第二幅
    figure;%打开一个窗口,用来显示(多幅)图像
    subplot(121), subimage(RGB);%显示图片,一行两列,第一幅
    subplot(122), subimage(RGB1);%显示图片,一行两列,第二幅

    这里来简单说一下subimage跟image的区别:image显示图像的长宽比可以随着窗口的改变而改变,但是subimage显示图像的长宽比则不随窗口的改变而改变。得到的效果图如下所示:

      6、获得指定坐标位置上的像素的颜色值

      在这里,我们读入一幅图之后,一方面我们直接显示坐标某处的像素值,另一方面我们自己通过点击图得某个地方(某个坐标),获取某个地方(某个坐标)来获取该坐标像素的颜色值,代码如下所示:

    close all ;
    clear all ;
    clc ;
    RGB=imread('F:/图像处理/Hydrangeas.jpg');%读入图像
    c=[23 155 288];%创建变量c,存放要显示的像素的横坐标
    r=[100 200 300];%创建变量r,存放要显示的像素的纵坐标
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
    set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
    pic_click=impixel(RGB);%通过鼠标点击,回车后显示像素值
    pic_stabe=impixel(RGB,r,c);%显示固定坐标位置的像素值

    impixel就是获取像素的函数,在默认情况下通过书本进行点击获取,在设置了坐标位置之后,则获取坐标位置的像素值。

    运行代码后,进行鼠标点击选择,我依次选择白、绿、蓝、黑,如下所示:

    然后进行回车,我们查看一下变量,如下所示:

    由此我们看到,1的颜色值都很大,因此接近白色,这与我首先点白色符合。

    而4的颜色值都很小,因此接近黑色,这与我最后点黑色符合。

      7、利用图像显示工具实时显示位置和像素值

    在这里我们利用一个显示工具,进行实时显示图片的像素和位置,代码如下所示:

    close all ;
    clear all ;
    clc ;
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
    set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
    pic=imshow('F:/图像处理/Hydrangeas.jpg');%直接显示一幅图像
    pic_tool = impixelinfo;%创建图像显示工具

    效果如下所示:

    (X,Y)显示的就是像素的位置,而[R G B]则是像素的颜色值。

    当然,我们也可以修改一下显示信息的位置,代码如下所示:

    close all ;
    clear all ;
    clc ;
    set(0,'defaultFigurePosition',[100,100,1000,500]);%设置窗口大小
    set(0,'defaultFigureColor',[1 1 1]);%设置窗口颜色
    pic=imshow('F:/图像处理/Hydrangeas.jpg');%直接显示一幅图像
    pic_tool = impixelinfo;%创建图像显示工具
    set(pic_tool,'position',[100 100 100 100]);%设置工具的位置
    figure;%注意,一定要加figure,否则第一幅图像会被替换
    x=imshow('F:/图像处理/Koala.jpg');%直接显示一幅图像
    y=impixelinfo;

    效果如下所示:

    最后,matlab提供的显示函数很丰富,这里无法一一描述,以后学习到了,再进行添加好了。

  • 相关阅读:
    10/28总结
    10/27总结
    10/26总结
    10/25总结
    10/24总结
    毕业设计第二周整理规划
    毕业设计第一周第五天完成情况汇总
    毕业设计第一周第四天完成情况汇总
    毕业设计第一周第三天完成情况汇总
    毕业设计第一周第二天完成情况汇总
  • 原文地址:https://www.cnblogs.com/IClearner/p/6783429.html
Copyright © 2020-2023  润新知