写真が焦点を合わせているかどうかをプログラム的に検出する方法はありますか?
-
05-10-2019 - |
質問
私が多くの写真を使用してサービスを説明するWebサービスを構築している場合、写真が焦点を合わせているかどうかを実際に検出することは役立ちます。
これをプログラム的に行う方法はありますか? (さらに良いことに、このようなルーチンのオープンソースの実装はありますか?)
解決
それが焦点を合わせていることをどうやって知っていますか?もちろん、オブジェクトを認識しますが、より一般的には、詳細があるためです。詳細は、通常、短いピクセルにわたる色の劇的な変化を意味します。 Googleを介して多くのエッジ検出アルゴリズムを見つけることができると確信しています。あまり考えずに:
edgePixelCount = 0;
for each pixel in image
{
mixed = pixel.red + pixel.blue + pixel.green;
for each adjacentPixel in image.adjacentPixels(pixel)
{
adjacentMixed =
adjacentPixel.red +
adjacentPixel.blue +
adjacentPixel.green;
if ( abs ( adjacentMixed - mixed ) > EDGE_DETECTION_THRESHOLD )
{
edgePixelCount++;
break;
}
}
}
if (edgePixelCount > NUMBER_OF_EDGE_PIXELS_THRESHOLD)
{
focused = true;
}
注:おそらく、すぐにエッジピクセルだけでなく、ある程度の距離で「隣接するピクセル」を使用する必要があります。焦点を当てていても、高いRES画像には勾配があることがよくあります。
他のヒント
ラプラシアンフィルター、グアシアンフィルター、ログ(ガウスのラプラシアン)などを使用して、実際のエッジ検出方法を調べてください。これらの方法は、Patrickvの単純な(エレガントではありますが)方法よりも特定のケースに適合するためにはるかに微調整可能です。
所属していません StackOverflow