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 回答