師大資工所助教 羅安鈞 s0914742@mail.ncyu.edu.tw Matlab with DIP 教學 師大資工所助教 羅安鈞 s0914742@mail.ncyu.edu.tw
What is matlab MATLAB is a high-performance language for technical computing. MATLAB is an interactive system. File format : M-file i.e. *.m
Matlab介面
介面說明 Workspace: 顯示目前工作環境內定義的變數 Command Window: 就如同一個文字操作介面,有 >> 提示號,在提示號之後輸入指令 Command History 紀錄曾經下過的指令
介面說明(cont.) Current Directory Window 預設路徑C:\MATLAB\Work 使用時只需呼叫檔名,不必給予檔案路徑。
指令操作 在command window輸入指令 按下 [Enter] 就執行計算並且顯示答案 Matlab不在乎空格 ex: 2*3-4 等同於 2 * 3 - 4 內建Function不分大小寫 ex: imread() 等同於 IMREAD()
指令操作 自訂變數有分大小寫 ex: 指令 x=0 不等於 X=0 分號(;)接於指令之後: 功用:不顯示結果(有存起來) ex: x=[0 1 2] //向量 ex: x=[0 1 2]; 顯示 不顯示 x= 0 1 2
影像處理常用數學函式 計算平方根 (square root),指令是 sqrt( ) 絕對值 (absolute value),指令是 abs( ) ( ) 裡面可以有其他的運算 ex : sqrt(1+2*3) sqrt(sqrt(16))
其他常用指令 冒號指令:可以從「頭」到「尾」產生一序列的數。 ex: 1:5 製造了序列 1 2 3 4 5 折線圖plot(): 用法:plot(x,y),其中 x 和 y 是維度相同的序列或向量。 ex: x=[0 1 2]; y=[0 1 0]; plot(x,y) 畫出從 (0,0) 到 (1,1) 到 (2,0) 的兩條折線
其他常用指令(cont.) 軸線axis( ) : 用法: axis(v1 v2 v3 v4)
For loop 用法:for 變數 = 向量或序列, 計算, end ex: for i = 1:100, ex: for i=1:2:100 , y(i) =2; s = s+i; End end ex: for x = [0 1 5 3], disp(x); //印出 x end
If Else 用法:if (True or False), 計算, end ex: if (isempty(t)) t = 0; End 用法: if (True_or_False), 計算, else, 計算, end
The MATLAB Image Processing Toolbox The Image Processing Toolbox is a collection of MATLAB functions (called M-functions or M-files) that extend the capability of the MATLAB environment for the solution of digital image processing problems.
The MATLAB Image Processing Toolbox(cont.) Including: -Spatial image transformations -Morphological operations -Neighborhood and block operations -Linear filtering and filter design -Transforms - Image analysis and enhancement -Image registration -Deblurring -Region of interest operations
How do I know M-function? Find it in Matlab Help. -by category. -by alphabetical order. Find it on the textbook.
Matlab 內建影像 C:\MATLAB7\toolbox\images\imdemos 皆為Matlab Help中範例的原始影像。 使用時只需直接在指令中輸入檔名,即可使用。 適用於觀察影像處理結果
Different Image Types Indexed images Intensity (grayscale) images Binary images RGB (true-color) images
Reading an image imread() 功用:將影像載入並存成array格式備用 用法:[I,map] = imread(filename); I = imread(filename); ex: I = imread('pout.tif'); I為指向影像的變數 不指定變數,則為ans
Displaying an image imshow() 功用:開啟一個視窗顯示影像 用法: imshow(I) imshow(I,map) Figure, imshow() 功用:開啟一個新視窗顯示影像 用法: figure,imshow(I)
Displaying an image(cont.) imshow(I, [low, high]) imshow(I, [ ]) 功用:displays I as a grayscale intensity image, specifying the data range for I. The minimum value in I is displayed as black, and the maximum value is displayed as white.
Displaying an image(cont.) Spatial domain
Displaying an image(cont.) pixval : 功能:cursor on image to show pixel values 用法: imshow(I),pixval
Displaying an image(cont.) colorbar 功能:To display an image with a colorbar that indicates the range of intensity values. 用法: imshow(I), colorbar ex: I = imread('pout.tif'); imshow(I) , colorbar
Writing an image imwrite() 功能:將影像寫入成檔案 用法: imwrite(I,filename,format) ex: imwrite(I,'pout.jpg‘,’JPEG’);
Image information Image size: size() ex: I= imread('saturn.png'); size(I) [M,N] = size(I) M=影像I的高 N=影像I的寬
Image information whos 功用:display information about an image . ex: whos I Imfinfo( filename ) 功用: display information about image file . ex: info = imfinfo('saturn.png')
Digital Image processing 影像二元化 g = im2bw(I, T); 功用:Convert intensity image I to binary image g using threshold T, where T must be in range [0, 1]. ex: I= imread('pout.tif'); g = im2bw(I, 0.4); imshow(g) ,colorbar
Digital Image processing(cont.) 彩色轉灰階 Rgb2gray() 功用:將RBG彩色影像轉換成gray-level影像。ex: I= imread ('saturn.png'); g = rgb2gray(I); imshow(g), colorbar
Digital Image processing(cont.) 反相 imcomplement( ) 功用:The negative of an image. ex: J = imcomplement(g); imshow(J),
Digital Image processing(cont.) 變更影像大小 imresize(I,scale,method); 功用:To change the size of an image. interpolation Method: -'nearest‘ :Nearest-neighbor interpolation -'bilinear‘ :Bilinear (the default) -'bicubic‘ :Bicubic interpolation
Digital Image processing(cont.) ex: I = imread('circuit.tif'); J = imresize(I,1.25); imshow(I) figure, imshow(J) J = imresize(I,[100 150], 'bilinear');
Digital Image processing(cont.) 旋轉影像 imrotate(I, angle); 功用:To rotate an image. ex: I = imread('pout.tif'); J = imrotate(I,35); imshow(J)
More Example Using affine transformation 1.Rotation 45 degree I=imread('spokes1.bmp'); T = maketform('affine',[cosd(45) -sind(45) 0; sind(45) cosd(45) 0; 0 0 1]); tformfwd([10 20],T); I2 = imtransform(I,T); imshow(I2)
More Example(cont.) 2.Translation I=imread('spokes1.bmp'); move = translate(strel(1), [25 30]); H = imdilate(I,move); imshow(H)
More Example(cont.) 3.shear I=imread('spokes1.bmp'); T = maketform('affine',[1 0 0; 1 2 0; 0 0 1]); tformfwd([10 20],T); I2 = imtransform(I,T); imshow(I2)
More Example(cont.) Edge detectors 1.Sobel edge detector Code://Both horizontal and vertical I=imread('bridge.jpg'); BW=rgb2gray(I); BW2=edge(BW,'sobel',0.02,'both'); figure,imshow(BW2)
More Example(cont.) 2.the Canny method low threshold: 0.04,high threshold: 0.10 , sigma is 1 Code: I=imread('bridge.jpg'); BW=rgb2gray(I); BW4 = edge(BW,'canny',[0.04 0.10],1); figure,imshow(BW4)
More Example(cont.) Canny 以 C語言來實作會困難很多!! Canny .txt
More Example(cont.) Filter(mean filter) Code: I = imread('coins.png'); h = ones(5,5) / 25; I2 = imfilter(I,h); imshow(I), title('Original Image'); figure, imshow(I2), title('Filtered Image')
More Example(cont.) Filter(unsharp masking filter ) Code: I = imread('cameraman.tif'); h = fspecial('unsharp'); I2 = imfilter(I,h); imshow(I), title('Original Image') figure, imshow(I2), title('Filtered Image')
M-function 不夠用怎麼辦? 自己寫。 在網路上尋找高手的package。 當找到新的M-files時,需幫它設定路徑,才可以像一般內建function直接使用。
Set path
Set path (cont.)
使用外掛程式 範例:使用Median Filter消除影像雜訊 Code: I=imread('510a.jpg'); imshow(I) F=SPFILT(I,'median',3,3); figure,imshow(F) F2=SPFILT(F,'median',3,3); figure,imshow(F2) F3=SPFILT(F2,'median',3,3); figure,imshow(F3)
MATLAB Compiler MATLAB Compiler 能讓您將MATLAB 程式轉換為可單獨執行的應用程式和軟體元件,並分享給其他使用者。 MATLAB Compiler 可免除您經由手動編寫方式將 MATLAB 程式碼轉譯為 C 或 C++ 的程序。 要再安裝MATLAB Component Run-time (MCR)元件等。
MATLAB Compiler (cont.) C to Matlab 設定了合適的編譯器,matlab 會自動幫我們編譯這個程式。 Example: hello world 指令: -編譯:mex filename ex: mex hello.c -執行: filename ex: hello
MATLAB Compiler (cont.) hello.c #include <stdio.h> #include "mex.h" void mexFunction(int nlhs,mxArray *plhs[], int nrhs, const mxArray *prhs[]){ printf("Hello, world."); } mex.h 定義了所有 Matlab 和 C 溝通所用到的 subroutine。 mexFunction 是程式的進入點,等價於 ANSI C 的 main。
參考書籍 Digital Image Processing Using MATLAB by Rafael C. Gonzalez , Richard E. Woods Steven L. Eddins
參考網站 http://libai.math.ncu.edu.tw/bcc16/B/matlab/index.shtml