【发布时间】:2014-01-14 06:42:11
【问题描述】:
假设我得到了矩阵,称为 mat。
mat(:,:,1) =
0 1 0 1 0
1 0 1 1 0
1 0 1 0 1
1 1 1 1 0
0 0 1 1 1
mat(:,:,2) =
1 1 0 1 1
0 1 1 0 1
0 1 1 0 1
1 0 1 1 1
0 0 0 0 0
mat(:,:,3) =
1 0 0 1 1
1 1 0 0 0
1 1 1 1 0
0 1 0 0 0
0 0 0 0 1
我想更改所有 3 层中为零的每一层的值。
mat_result(:,:,1) =
0 1 -1 1 0
1 0 1 1 0
1 0 1 0 1
1 1 1 1 0
-1 -1 1 1 1
mat_result(:,:,2) =
1 1 -1 1 1
0 1 1 0 1
0 1 1 0 1
1 0 1 1 1
-1 -1 0 0 0
mat_result(:,:,3) =
1 0 -1 1 1
1 1 0 0 0
1 1 1 1 0
0 1 0 0 0
-1 -1 0 0 1
首先,我找到位置
ind = find(mat(:,:,1)==0 & mat(:,:,2)==0 & mat(:,:,3)==0)
ind =
5
10
11
简单来说,我就是这样做的
matt1 = mat(:,:,1);
matt2 = mat(:,:,2);
matt3 = mat(:,:,3);
matt1(ind) = -1;
matt2(ind) = -1;
matt3(ind) = -1;
mat_result = cat(3,matt1,matt2,matt3);
我的问题是
-
有没有更好的方法来选择/更改子矩阵的子矩阵? 例如(但它不起作用):
mat(:,:,1)(mat(:,:,1)==0 & mat(:,:,2)==0 & mat(:,:,3)==0) = -1; 是否有更短的方法来更改所有 3 层中值为零的每一层中的值?
【问题讨论】:
标签: matlab image-processing matrix