MATLABで読み取られる画像のデータ型はuint8であり、行列で使用されるデータ型はdoubleであるためI2=im2double(I1)
、画像配列I1を倍精度型に変換します。変換しない場合、uint8を加算および減算するとオーバーフローします。エラーのヒントFunction '*' is not defined for values of class 'uint8'
:。
既定
では、matlabは画像にデータをdoubleタイプ、つまり64ビット浮動小数点数として保存します。
Matlabは符号なし整数(uint8とuint16)もサポートしています。
uint型の利点はスペースを節約できることであり、計算が含まれる場合はdouble型に変換する必要があります。
im2double()
:画像配列を倍精度型に変換しますim2uint8()
:画像配列をunit8タイプに変換しますim2uint16()
:画像配列をunit16タイプに変換します
注:doubleタイプのイメージにはim2uint8()を使用してください。問題が発生します。
doubleのデフォルトは0-1の間の数値です。uint8は0-255の間の数値です。配列uint8がx1 = {0,1,2}型の場合、変換後、x2 = {0,0.5,1}となり
、配列の場合doubleタイプy1 = {0、1、2}、変換後、y2 = {0、255、255}になります