画像を縮小して顔検出アルゴリズムを最適化したいと考えています。最善の方法は何ですか?cvPyrDown (ある例で見たように、これまでのところ悪い結果が得られたように)、cvResize または別の関数を使用する必要がありますか?
3 に答える
画像を拡大縮小したいだけの場合は、cvResize
AdrianPopoviciが提案したように使用してください。
cvPyrDown
ガウスぼかしを適用して画像を滑らかにし、デフォルトでは、列と行を拒否することで画像を2分の1にダウンサンプリングします。この平滑化はパフォーマンスを低下させる可能性があります(検出アルゴリズムにどのように影響するかはわかりません)。パフォーマンスが低下するもう1つの可能性は、行と列を削除するだけで不連続になる可能性があります。cvResize
一方、顔検出をより適切に機能させることにより、スムーズな補間(最近傍以外のもので補間したと仮定)が可能になります。使用されている正確なカーネルcvPyrDown
の詳細については、のドキュメントを参照してください。
画像を縮小するには、次を使用します。
void cvResize(const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR )
画像を縮小するには、一般に CV_INTER_AREA 補間を使用すると見栄えがよくなりますが、画像を拡大するには、一般に CV_INTER_CUBIC (遅い) または CV_INTER_LINEAR (高速ですが問題なく表示されます) を使用すると見栄えがよくなります。
しかし、これまで cvPyrDown を使用したことがないので、それがパフォーマンスであるかどうかはわかりません...
顔検出アルゴリズムが haar 機能を使用している場合、再スケーリングはまったく必要ありません。積分画像を使用して、検出器をスケーリングすることで必要なスケールにアクセスするだけです。また : cvResize は の新しいバージョンでOpenCV (2.X)
は、OpenCV 1.X