數字圖像處理筆記與體會(二)——打開和顯示圖像


  最近事情太多,比較忙,現在快五一了,趕緊記錄一下。前面第一節講了一些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提供的顯示函數很豐富,這里無法一一描述,以后學習到了,再進行添加好了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM