int8 - double to num matlab
¿Hace que Matlab emita una advertencia al convertir un doble en uint8 y viceversa? (1)
Una posible solución es definir su propia función uint8
que arroja a uint8
y emite una advertencia si se ha truncado algún valor.
Debe colocar esta función en una carpeta donde uint8
función uint8
. Por ejemplo, su carpeta de usuario es una buena opción, ya que generalmente aparece como la primera en la path
.
O, como señaló Sam Roberts, si desea que se llame a esta función solo al convertir de double
a uint8
(no al convertir de cualquier otro tipo a uint8
), uint8
en una carpeta llamada @double
dentro de su ruta.
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
La advertencia está activada por defecto. Puedes warning(''on'',''MATLAB:castTruncation'')
o desactivarlo con los comandos warning(''on'',''MATLAB:castTruncation'')
y warning(''off'',''MATLAB:castTruncation'')
(gracias a CitizenInsane por la sugerencia).
Normalmente, los colores de Matlab están representados por tres vectores de elementos de valores de intensidad RGB, con precisión uint8 (rango 0 - 255) o doble (rango 0 - 1). Las funciones de Matlabs, como imshow
funcionan con cualquiera de las representaciones, lo que facilita su uso en un programa.
Sin embargo, es igualmente fácil introducir un error al asignar valores de color de una matriz de un tipo a la de otro (porque el valor se convierte en silencio, pero no se vuelve a escalar al nuevo rango). Después de haber pasado varias horas buscando un error así, me gustaría asegurarme de que nunca se vuelva a presentar.
¿Cómo hago que Matlab muestre una advertencia cuando se realiza la conversión de tipo?
Idealmente, solo sería cuando la conversión es entre double
y uint8
. También debería ser difícil de desactivar (es decir, la opción no se restablece al cargar un espacio de trabajo, o cuando se bloquea matlab).