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,输出如图:
位置变换过程当中各矩阵,如图:
像素填充过程当中各矩阵,如图: