Matlab中的矩阵归一化

3

我有一个由double类型表示的rgb图像矩阵(高度*宽度*3)。 在对矩阵进行一些操作后,一些值变得大于1或小于0。 我需要将这些值规范化回1和0。 谢谢。

2个回答

6

好的,您需要使用条件索引来实现。假设您的矩阵名称为 M。 如果您只想将大于1的值设置为1,小于0的值设置为零,请使用:

M(M > 1) = 1;
M(M < 0) = 0;

然而,如果您想将所有值按比例归一化到区间[0;1],那么您需要执行类似以下操作:

mmin = min(M(:));
mmax = max(M(:));
M = (M-mmin) ./ (mmax-mmin); % first subtract mmin to have [0; (mmax-mmin)], then normalize by highest value

在考虑归一化时,需要注意矩阵M已经在区间[0; 1]内的情况,此时不需要再进行归一化处理。


谢谢,确实做到了我要求的功能。但结果不够好,所以我想我需要对矩阵进行归一化处理。最大值应该是1,最小值为0,其他所有值都成比例。 - Sanich
抱歉,我没有理解正确。我已经编辑了我的答案。希望这就是你想要的。 - Marek Kurdej
@Curdeius:如果你想裁剪在[0,1]范围内的值(你的第一个解决方案),你也可以将其向量化,写成:M = min(max(M,0),1) - Amro
@Curdeius:也许最后一个操作应该是(M = (M-mmin) ./ (mmax-mmin);)?(而不是.*) - Sanich

0
如果你只想看图片,你可以使用以下方法:
imagesc(M); 

它会自动处理范围。

如果您想手动更改值并完全控制它,

M = M ./ max(M(:));

如果你只有正值,可以使用这个技巧。

如果想要得到完整对比的图像,你可能需要:

m = m - min(m(:));
m = m ./ max(m(:));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接