(1)在命令列視窗輸入‘doc 函數
’,如圖:
(2)彈出頁面即為函數的功能,如圖:
在命令列視窗輸入程式碼時,若不需要輸出結果,則在程式碼句末尾加‘;
’,再回車;若需要輸出結果,則直接回車即可。如圖:
在命令列視窗輸入‘clc
’,會清空命令列視窗。如圖:
matlab中第一個值從1開始計數。
width = 19;
sigma = 3;
gaus = fspecial('gaussian', width, sigma);
%h = fspecial(type,para)
%type指定運算元的型別,para指定相應的引數
%gaussian為高斯低通濾波器
surf(gaus)
%surf命令繪製著色的三維曲面
axis off
%關閉所有的座標軸標籤、刻度、背景
執行程式,輸出如圖:
width = 19;
sigma = 3;
gaus = fspecial('gaussian', width, sigma);
%函數fspecial(type,para):建立預定義的二維濾波模板。
%其中,type:運算元的型別,para:相應的引數
%gaussian為高斯低通濾波器
imagesc(gaus)
%採用線性對映會對資料進行縮放後,顯示影象
colormap (hot)
%函數繪製表面圖時,colormap(即色圖)決定圖片的顏色。
執行程式,輸出如圖:
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, []);
%自動調整資料的範圍以便於顯示。
執行程式,輸出如圖:
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]範圍內的影象
執行程式,輸出如圖:
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中第1、2、1、2的值賦給X2,取出Y中第1、1、3、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)
%顯示影象
執行程式,輸出如圖:
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('放縮');
執行程式,輸出如圖:
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');
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,輸出如圖:
位置變換過程中各矩陣,如圖:
畫素填充過程中各矩陣,如圖: