1、基礎功能:
-
(1)在命令行窗口輸入‘
doc 函數
’,如圖:
(2)彈出頁面即爲函數的功能,如圖:
shell -
在命令行窗口輸入代碼時,若不須要輸出結果,則在代碼句末尾加‘
;
’,再回車;若須要輸出結果,則直接回車便可。如圖:
數組 -
在命令行窗口輸入‘
clc
’,會清空命令行窗口。如圖:
函數 -
matlab中第一個值從1開始計數。ui
2、項目一:
width = 19; sigma = 3; gaus = fspecial('gaussian', width, sigma); %h = fspecial(type,para) %type指定算子的類型,para指定相應的參數 %gaussian爲高斯低通濾波器 surf(gaus) %surf命令繪製着色的三維曲面 axis off %關閉全部的座標軸標籤、刻度、背景
運行程序,輸出如圖:
spa
3、項目二:
width = 19; sigma = 3; gaus = fspecial('gaussian', width, sigma); %函數fspecial(type,para):創建預約義的二維濾波模板。 %其中,type:算子的類型,para:相應的參數 %gaussian爲高斯低通濾波器 imagesc(gaus) %採用線性映射會對數據進行縮放後,顯示圖像 colormap (hot) %函數繪製表面圖時,colormap(即色圖)決定圖片的顏色。
運行程序,輸出如圖:
命令行
4、項目三:
width = 19; sigma = 3; gaus = fspecial('gaussian', width, sigma); %函數fspecial(type,para):創建預約義的二維濾波模板。 %其中,type:算子的類型,para:相應的參數 %gaussian爲高斯低通濾波器 g = imfilter(gaus, gaus, 'symmetric', 'same'); %對任意類型數組或多維圖像進行濾波 %I = imfilter(f, w, filtering_mode, boundary_options, size_optinos); %I爲濾波結果,f是輸入圖像,w爲濾波模板 %filtering_mode爲濾波模式,boundary_options爲邊界選項,size_optinos爲大小選項 figure;imshow(g, []); %imshow(I,[low high])顯示灰度圖像I,以二元素向量 [low high] 形式指定顯示範圍。 sigma = 16; noise = randn(size(g))*sigma; %randn(n)返回一個n*n的隨機項的矩陣。若是n不是個數量,將返回錯誤信息。 g_n = gaus + noise; figure;imshow(g_n, []); %自動調整數據的範圍以便於顯示。
運行程序,輸出如圖:
3d
5、項目四:
im_R = imread('E:\Matlab\rabbit.jpg'); %讀取圖像 im_R_g = rgb2gray(im_R); %函數rgb2gray:將圖像轉換爲灰度圖像 im_r_g = double(im_R_g); %將圖像轉換爲double型進行運算 im_r_g(7, 9) %索引特定像素的灰度值 figure;imshow(im_R) figure;imshow(im_R_g, [40 100]) %顯示灰度值在[LOW HIGH]範圍內的圖像
運行程序,輸出如圖:
code
6、項目五:
img_M = imread('E:\Matlab\mouse.jpg'); %imread:讀取圖像 figure;imshow(img_M) %imshow:顯示圖像 [X Y] = ginput(4); %ginput(n):可以從當前軸標識n個點,並在x和y列矢量中返回這些點的x和y座標 X2 = [X(1:2); X(1:2)]; Y2 = [Y(1); Y(1); Y(3) + 50; Y(3) + 50]; %取出X中第一、二、一、2的值賦給X2,取出Y中第一、一、三、3的值進行相應 %matlab中第一個值從1開始計數 tform = maketform('projective', [X Y], [X2 Y2]); %函數maketform(a,b):建立TFORM結構體。 %其中,a:但願執行變換的類型,b:變換矩陣。 %’projective’:投影變換。 img_M_out = imtransform(img_M, tform, 'bicubic'); %函數imtransform(a,tform,b):圖像的空間變換,返回變換後的圖像。a:輸入變換的圖像,b:TFORM結構體 %'bicubic'爲三次插值 figure;imshow(img_M_out) %顯示圖像
運行程序,輸出如圖:
orm
7、項目六:
img = imread('E:\Matlab\cat.jpg') se = translate(strel(1), [20 10]); %translate(SE, [y y]): %將圖像img向下、向右移動20、10個位置 img_m = imdilate(img, se); %imdilate(img, se):利用膨脹函數平移圖像img img_t = imrotate(img_m, 45); %imrotate(img, theta):將圖像img旋轉theta度 img_e = imresize(img_t, 0.5); %imresize(img, s):將圖像img放大s倍 figure;imshow(img) title('原圖'); figure;imshow(img_m) title('平移'); figure;imshow(img_t) title('旋轉'); figure;imshow(img_e) title('放縮');
運行程序,輸出如圖:blog
8、做業一:
- 文件一:a1_script.m
img = imread('4.1.05.tiff'); %img = imread(‘filename’):根據文件名filename讀取尺寸爲M*N的灰度或彩色圖像數據,儲存在數組img中。 %若文件爲灰色圖像,則img是M*N的數組;若文件名爲彩色圖像,A是M*N*3的數組。 figure; imshow(img); % imshow():將圖像以原始尺寸顯示。 title('RGB'); %設置圖片標題。 img_g = rgb2gray(img); %將彩色圖像轉換爲灰度圖像 figure; imshow(img_g); title('Gray'); img_process = my_similarity(img, 100, -10, 20, 0.2); %img_process爲my_similarity的實際輸出參數。 figure; imshow(img_process); title('Process');
- 文件二:my_similarity.m
function [img_p_inter] = my_similarity(img, dx, dy, theta, s) %function [輸出]= fun(輸入):定義函數my_similarity,fun爲函數名,參數爲img、dx、dy、theta、s。 %img_p_inter爲my_similarity的形式輸出參數。 V = [linspace(1, 1, 256); 1:1:256]; %定義圖片的座標矩陣V(不含像素值),用於變換。 %[;]':將行數爲2的矩陣進行轉置。 %linspace(x1, x2, n):在區間(x1, x2)中生成n個等距點。 %x1:a:x2:在區間(x1, x2)中生成間距爲a的點。 for j = 2:256 A1 = [linspace(j, j, 256); 1:1:256]; V = cat(2, V, A1); %x1:x2:在區間(x1, x2)中生成默認間距爲1的點。 %x1:a:x2:在區間(x1, x2)中生成間距爲a的點。 %cat(dim, A, B):按dim來聯結A和B兩個數組。 %dim爲1,[A; B];dim爲2,[A, B];dim爲3,A、B爲兩層。 end M1 = linspace(dx, dx, 65536); %linspace(x1, x2, n):在區間(x1, x2)中生成n個等距點。 M2 = linspace(dy, dy, 65536); %linspace(x1, x2, n):在區間(x1, x2)中生成n個等距點。 M = [M1; M2]; %定義平移變換矩陣。 R = [cosd(theta), -sind(theta); sind(theta), cosd(theta)]; %定義旋轉變換矩陣。 S = [s, 0; 0, s]; %定義縮放變換矩陣。 V_M = M + V; %對圖片進行平移。 V_M_R = R * V_M; %對圖片進行關於原點的逆時針旋轉。 V_M_R_S = S * V_M_R; %對圖片進行縮放。 V_M_R_S_INT = uint8(V_M_R_S); %uint8(x):u(無符號)+int(整型)+8(8位二進制)。把大於255的數強制置爲255,而小於255且大於0的數則保持不變,小於0的數強制置爲0。 %uint16的範圍是0—65535,uint8的範圍是0—255。 V_M_R_S_INT = V_M_R_S_INT + uint8(ones(2, 65536)); %ones(M, N):產生一個M*N的全1矩陣。 %整型化 %「V_M_R_S中各元素+1」的緣由:因爲uint8的範圍爲[0,255],而在matlab定義座標是從1開始的。% img_p = uint8(cat(3, ones(256, 256), ones(256, 256), ones(256, 256))); %cat(dim, A, B):按dim來聯結A和B兩個數組。 %dim爲1,[A; B];dim爲2,[A, B];dim爲3,A、B爲兩層。 %ones(M, N):產生一個M*N的全1矩陣。 for p = 1:3 k = 1; for m = 1:256 for n = 1:256 img_p(V_M_R_S_INT(1, k), V_M_R_S_INT(2, k), p) = img(m, n, p); %將img的R、G、B三層的像素值賦給img_p k = k + 1; end end end %對虛擬圖片進行像素填充。 %p:RGB維數,k:循環次數,m:座標x,n:座標y。 %變量img存放了R、G、B三層的像素值。 %V_M_R_S_INT:2行65536列的矩陣,存放4.1.05.tiff的各像素點位置信息。 Vq1 = interp2(single(img_p(:, :, 1)), 3); %interp2:二維網格數據的插值 %interp2(V,k):將每一個維度上樣本值之間生成2^k-1個插入點。V爲single類型。 %matlab用single類型存儲數據,single類型佔4個字節;用double類型存儲數據,double類型佔4個字節。 Vq2 = interp2(single(img_p(:, :, 2)), 3); Vq3 = interp2(single(img_p(:, :, 3)), 3); img_p_inter = uint8(cat(3, Vq1, Vq2, Vq3)); %cat(dim, A, B):按dim來聯結A和B兩個數組。 %dim爲1,[A; B];dim爲2,[A, B];dim爲3,A、B爲兩層。 %插值 end
運行程序a1_script,輸出如圖:
位置變換過程當中各矩陣,如圖:
像素填充過程當中各矩陣,如圖: