让 Matlab 在将 double 转换为 uint8 时发出警告,反之亦然?

Make Matlab issue a warning when converting a double to a uint8 and vice versa?

通常在 Matlab 中,颜色由 RGB 强度值的三个元素向量表示,精度为 uint8(范围 0 - 255)或双精度(范围 0 - 1)。诸如 imshow 之类的 Matlabs 函数可与任何一种表示一起使用,从而使两者都易于在程序中使用。

然而,在将颜色值从一种类型的矩阵分配给另一种类型的矩阵时,同样容易引入错误(因为该值会静默转换,但不会重新缩放到新范围)。刚刚花了几个小时才发现这样的错误,我想确保它再也不会被引入。

如何让Matlab在发生类型转换时显示警告?

理想情况下,只有在 doubleuint8 之间进行转换时才会这样做。它也应该很难停用(即加载工作区时或 matlab 崩溃时不会重置该选项)。

一个可能的解决方案是定义您自己的 uint8 函数,该函数转换为 uint8 并在某些值被截断时发出警告。

您应该将此函数放在一个文件夹中,使其隐藏内置 uint8 函数。例如,您的用户文件夹是一个不错的选择,因为它通常出现在 path.

中的第一个。

或者,如 Sam Roberts 所述,如果您希望仅在从 double 转换为 uint8 时调用此函数 (而不是在转换时从任何其他类型转换为 uint8),将其放入路径中名为 @double 的文件夹中。

function y = uint8(x)
y = builtin('uint8', x);
if any(x(:)>255) || any(x(:)<0)
    warning('MATLAB:castTruncation', 'Values truncated during conversion to uint8')
end

警告默认开启。您可以使用命令 warning('on','MATLAB:castTruncation')warning('off','MATLAB:castTruncation') 打开或关闭它(感谢 CitizenInsane 的建议)。