matlab学习笔记

  1. from matlab官网
  2. 数字图像处理(matlab本科教学版)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
x = 1 : 2 : 10

x = linspace(1,10,5)

x = x'

randn(3,4)
plot(v1,'ro','LineWidth',3)
legend('a','b','c') %图注
numel(x)%x的长度,size返回两个值

save finename variable,

load filename

%与或非 & |
v = v1(v1 < 4)

import data %右键

data(:,end) %最后一列

+-自带broadcast
[vM idx] = max(v)


if true
...
else
...
end

for i = 1:3
...
end

数字图像处理

Matlab语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
% 匿名函数
gmean = @(A) prod(A, 1)^(1/size(A,1))

% 可变参数
varargin varargin{:}
% 函数输入参量
n = nargin

% 生成图
[X, Y] = meshgrid(row_low:row_high, column_low:column_high);
f = sin(a * X + b * Y);

% 勾股定理
D = hypoy(U, V)

% 非零元素的索引
I = find(A);
[r, c] = find(A);
[r, c, v] = find(A); % v 返回 A 中非零值

plot相关

线模式 p35

1
2
3
4
5
6
% 设置坐标大小 
axis([0 255 0 15000])
% 设置坐标轴尺度
set(gca, 'xtick', [0:50:255])
% 充满
axis tight

mesh相关

1
2
3
4
5
6
7
8
9
% set color
colormap([0,0,0]);
% 关闭网格
grid off /on
% 关闭坐标轴
axis off /on
% 观测点角度
view(az, el);
view(3) % 把当前设为默认

surf相关

灰度变换空间滤波

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
% 映射
g = imadjust(f, [low_in, high_in], [low_out, high_out], gamma)
% 得到最低最高亮度
Low_high = stretchlim(f)
% 反转图像
g = imcomplement(f)
% 对数变换缩小动态范围(broadcast)
g = im2uint8(mat2gray(log(1+double(f))));
% 统计灰度
p = imhist(f, b=2) / numel(f) %归一化
% 直方图均衡
g = histeq(f,nlev = 64) %设为256或许得到正确的结果
g = histeq(f,hspec) % 用一个分布来均衡
% 空间滤波(相关/卷积) p46
g = imfilter(f, w, 'replicate') % imshow(g,[])
% 非线性空间滤波
gmean = @(A) prod(A, 1)^(1/size(A,1)); % 匿名函数
f = padarray(f,[m n],'replicate'); % 削减边界效应
g = colfilt(f, [m n],'sliding',@gmean); % 滤波
[M N] = size(f);g = g((1:M) + m, (1:N) + n); %删除之前填充
% 标准空间滤波器 (拉普拉斯,矩形圆形平均,梯度)p50
w = fspecial('type',parameters);
% 统计排序滤波器
% 用邻域domian中的像素按灰度排序的第order代替f中元素
g = ordfilt2(f,order,domain);
% 中值滤波器(优化椒盐噪声)
g = ordfile2(f, (m*n+1)/2, ones(m,n));
g = medfilt2(f);
% 最小滤波器
g = ordfile2(f, 1, ones(m,n));
% 最大滤波器
g = ordfile2(f, m*n, ones(m,n));

频率域滤波

$$
F(u,v) = \sum{x=0}^{M-1}\sum{y=0}^{N-1}f(x,y)e^{-j2\pi(ux/M+vy/N)} \f(x,y) = \sum{u=0}^{M-1}\sum{v=0}^{N-1}F(u,v)e^{j2\pi(ux/M+vy/N)}
$$

1
2
3
4
5
6
7
8
9
10
11
12
13
% 傅里叶变换
F = fft2(f);
F = fft2(f, P, Q); %PQ零填充
S = abs(F); % 傅里叶谱
f = ifft2(F); % 傅里叶反变换

% 空间域处理
h = fspecial('sobel');
gs = imfilter(f, h);
% 频率域处理
PQ = paddedsize(size(f));
H = ifftshift(freqz2(h,PQ(1),PQ(2)));
gf = dftfilt(f,H);

图像复原与重建

1
2
3
4
5
6
7
8
% 添加噪声
g = imnoise(f, type, parameters)
% 棋盘
f = checkerboard(8);
% 维纳滤波
frest = deconvwnr(g, PSF);
% 模糊边缘
J = edgetaper(I, PSF);
文章目录
  1. 1. 数字图像处理
    1. 1.1. Matlab语法
      1. 1.1.1. plot相关
      2. 1.1.2. mesh相关
      3. 1.1.3. surf相关
    2. 1.2. 灰度变换空间滤波
    3. 1.3. 频率域滤波
    4. 1.4. 图像复原与重建