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

  最近事情太多,比较忙,现在快五一了,赶紧记录一下。前面第一节讲了一些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提供的显示函数很丰富,这里无法一一描述,以后学习到了,再进行添加好了。

原文地址:https://www.cnblogs.com/IClearner/p/6783429.html