0

これはopencvコードです:</ p>

int main()  
{  
IplImage* image=cvLoadImage("C:\\boat.png",CV_LOAD_IMAGE_GRAYSCALE);

cout<<"1-norm is : "<<cvNorm(image,NULL,CV_L1)<<endl;  

cout<<"2-norm is : "<<cvNorm(image,NULL,CV_L2)<<endl;  //the result is 6000+,it's too
big and unnormal!

return 0;
}

l2ノルムの結果は非常に大きく、つまり6000以上ですが、matlabの答えは次のように229です。

これはMATLABコードです:</ p>

>> norm(image)

ans =

229.7975

なんで?

4

1 に答える 1

2

逆に、グレースケール画像の 6000+ ノルムは正常に見えます。グレースケール画像の値の範囲は 0 ~ 255 であるため、画像のサイズによっては、64x64 のような小さな画像であっても、L2=sqrt(sum(image.^2))(実際のコードではなく) 数千、数万、またはそれ以上になる場合があります。

さらに興味深いのはnorm(image)、Matlab で が非常に低い理由です。normはベクトルを受け入れないためuint8、画像の読み込みとそのノルムの計算の間のどこかでデータ変換が行われ、画像の絶対値とそれに続くそのノルムを変更するという副作用もある可能性があります。

于 2012-09-21T07:54:51.113 に答える