matlab循环判断语句

单条件语句

格式1

1
2
3
if 逻辑表达式
程序语句组
end

简单例子如下

1
2
3
4
a=1; b=2; c=0;
if a+b==3
c=3;
end

格式2

1
2
3
4
5
if 逻辑表达式
程序语句组1
else
程序语句组2
end

简单例子如下

1
2
3
4
5
6
a=1; b=2;
if a>2
c=3;
else
c=0;
end

多条件语句

1
2
3
4
5
6
7
if 条件1
程序语句组1
elseif 条件2
程序语句组2
else
语句组n
end

简单例子:

1
2
3
4
5
6
7
8
a=1;b=2;c=0;
if a>6
d=3;
elseif b<1
d=5;
elseif c==0
d=100;
end

for-end循环

格式

1
2
3
4
for 循环变量=初值:步长:终值
循环体语句组
end
%注:步长为1时可省略

简单例子

1
2
3
4
s=0;
for i=1:10
s=s+i;
end

while-end循环

格式

1
2
3
while 逻辑表达式
循环体语句组
end

简单例子

1
2
3
4
5
6
s=0;
i=1;
while i<=10
s=s+i;
i=i+1;
end

在这两个循环中可以使用break和continue

简单应用:求[10,20]之间第一个被3整除的整数

1
2
3
4
5
6
7
8
for i=10:20
if rem(i,3)~=0
continue
else
break
end
end
disp(i)

将图像最亮点找出来的两种方法

循环方法

1
2
3
4
5
6
7
8
9
10
11
12
f=imread('cameraman.tif');
[m,n]=size(f);
s = 0;
for i=1:m
for j=1:n
if f(i,j)>s
s=f(i,j);
m_pos=i;
n_pos=j;
end
end
end

函数方法

1
2
3
f = imread('cameraman.tif');
i_max=max(f(:));
[i,j] = find(f==i_max)

注意:函数方法是能够找出所有最亮点,而之前的那个只能找到第一个

练习

练习1

练习内容

统计一幅灰度图像中像素值大于等于200的像素个数

代码

1
2
3
4
5
6
7
8
9
10
11
I = imread('cameraman.tif');
s = 0;
[m,n] = size(I);
for i=1:m
for j=1:n
if I(i,j)>=200
s = s+1;
end
end
end
s

练习2

练习内容

将一幅灰度图像中灰度值小于50的像素置黑,灰度值大于200的置白

代码

1
2
3
4
5
6
7
8
9
10
11
12
I = imread('cameraman.tif');
[m,n] = size(I);
for i=1:m
for j=1:n
if I(i,j)<50
I(i,j)=0;
elseif I(i,j)>200
I(i,j)=255;
end
end
end
imshow(I);

练习3

练习内容

计算灰度图像中像素值大于100且小于200的像素个数

代码

1
2
3
4
5
6
7
8
9
10
11
I = imread('cameraman.tif');
[m,n] = size(I);
s = 0;
for i=1:m
for j=1:n
if I(i,j)>100 && I(i,j)<200
s = s+1;
end
end
end
s

练习4

练习内容

将图像中的最亮点找出来,并记录其位置及灰度值

代码

1
2
3
4
5
6
7
8
9
10
11
12
I = imread('cameraman.tif');
[m,n] = size(I);
b_x = 1; b_y = 1; b = 0;
for i=1:m
for j=1:n
if I(i,j)>b
b_x = i;
b_y = j;
b = I(i,j);
end
end
end

练习5

练习内容

r表示原始图像的像素值,s表示增强后的图像像素值,观察对比结果

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
I = imread('cameraman.tif');
I1 = I;
I = im2double(I);
[m,n] = size(I);
for i=1:m
for j=1:n
if I(i,j)<0.35
I(i,j) = 0.3*I(i,j);
elseif I(i,j)>0.65
I(i,j) = 1+0.3*(I(i,j)-1);
else
I(i,j) = 0.105+2.6333*(I(i,j)-0.35);
end
end
end
subplot(1,2,1); imshow(I1);
subplot(1,2,2); imshow(I);

效果

Author: YihangBao
Link: https://roarboil.github.io/2020/05/20/matif/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.