让 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在发生类型转换时显示警告?
理想情况下,只有在 double
和 uint8
之间进行转换时才会这样做。它也应该很难停用(即加载工作区时或 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 的建议)。
通常在 Matlab 中,颜色由 RGB 强度值的三个元素向量表示,精度为 uint8(范围 0 - 255)或双精度(范围 0 - 1)。诸如 imshow
之类的 Matlabs 函数可与任何一种表示一起使用,从而使两者都易于在程序中使用。
然而,在将颜色值从一种类型的矩阵分配给另一种类型的矩阵时,同样容易引入错误(因为该值会静默转换,但不会重新缩放到新范围)。刚刚花了几个小时才发现这样的错误,我想确保它再也不会被引入。
如何让Matlab在发生类型转换时显示警告?
理想情况下,只有在 double
和 uint8
之间进行转换时才会这样做。它也应该很难停用(即加载工作区时或 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 的建议)。