0

cvIntegral の使用法を理解しようとしています。出力画像は添付画像のように動作しますか? ええ、手動で計算すると、左上の部分の値が小さく(黒)、右下に行くにつれて(明るくなります)。正規化 (0 ~ 255) を使用しないと、イメージは完全に白くなり、次に一部が黒くなります。

元の画像

元の画像

積分画像

積分画像の正規化

4

1 に答える 1

0

実際には、3つのタイプがあるため、計算する積分のタイプによって異なります-ドキュメントから:

この関数は、次のようにソース イメージの 1 つまたは複数の積分イメージを計算します。ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

最初のタイプの積分について話すと、これは単なる長方形内のすべてのピクセルの合計です[(0,0),(x,y)]。積分画像の私の出力はこれでした: ここに画像の説明を入力

論理的に正しいと思われるもの。

正規化 ( 255/max) を使用すると、出力と同じ画像が表示されます。

更新: エラーが発生したようです-imwrite統合された画像の一部の値が大きすぎる(255より大きい)ため、画像の品質が低下します(おそらく)が、imshow正常に表示されます(その画像は単なるスクリーンショットでした)。したがって、あなたが行ったように正規化を使用してください。コードは次のとおりです。

Mat src = imread("moon.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat int1, norm;

integral(src, int1);

double max;
minMaxIdx(int1, 0, &max);
int1.convertTo(norm, CV_8UC1, 255/max);

imshow("simple output", int1);//shows normally
imshow("normalized output", norm);
//imwrite("output.jpg", int1);// looses quality
waitKey();
于 2012-10-27T19:52:51.783 に答える