3

Facebookがサムネイルを作成するときと同じように、画像(写真)の関連領域を正方形のアスペクト比(1:1)でトリミングしようとしています。

私たちの場合、クロップが処理される画像の元の高さ(または画像の向きが縦向きの場合は幅h> w)であるか、自動クロップがそれ自体のサイズを変更しているかは、実際には問題ではありません。

オブジェクトを背景やフォーカス、またはヒートマップのようなものと比較し、色や領域を組み合わせて最も関連性の高い部分を見つけるようなアルゴリズムを考えています。顔検出と同様に、使用する画像の主要部分を見つけるためのいくつかのアイデア/方法があります。

Java(Android)ベースのソリューションまたはJava/Androidに採用できるものを探しています。どんな助けやアイデアも大歓迎です!ありがとうございました!

4

1 に答える 1

3

これを2つのステップで行います。最初のステップはより堅牢で、2番目のステップはたとえばエントロピーに基づくことができます。最初のステップとして、現在比較的一般的なSURFを使用できます。これは、Javaによる実装を見つけることを期待しています。SURFは、画像を説明することが重要であると考える一連の重要なポイントを提供します。これらの重要なポイントが画像のどこにあるかを考えると、次のセットがあります。(x, y)最初の画像の領域をこの点のセットを囲む領域に縮小するために使用する座標。さて、これらの重要なポイントは画像のどこかにある可能性があるため、おそらくそれらのいくつか(つまり、他のポイントから離れすぎているもの、つまり外れ値)を破棄することをお勧めします。この破棄手順を実行する非常に簡単な方法は、最初のキーポイントのセットから凸包を検討することです。そこから、この包を複数回剥がすことができます。それを「剥がす」たびに、現在の凸包のポイントを効果的に破棄します。

このような最初のステップのサンプルを次に示します。

f = Import["http://fohn.net/duck-pictures-facts/mallard-duck.jpg"];
kp = ImageKeypoints[f, MaxFeatures -> 200];
Show[f, Graphics[{PointSize[Medium], Red, Point[kp]}]]

ここに画像の説明を入力してください

キーポイントによって形成された凸包を一度剥がし、残りのポイントの境界長方形に従って画像をトリミングした後:

ここに画像の説明を入力してください

上の画像から、他の方法に基づいて、どのサブ領域を選択するかを決定できます。明らかに一般的なものは、Redditで使用されているもので、画像からエントロピーの小さいスライスを連続的に削除します。すばやく検索すると、https://github.com/christopherhan/pycrop/blob/master/pycrop.py#L33でそのような実装の1つを見つけました。これは、非常に簡単です。

あなたが試してみたいと思うかもしれない別の種類の方法は、シームカービングと呼ばれています。また、最初の画像の大きさによっては、画像の小さな部分をトリミングしても関連性のあるものが得られる可能性は低いことに注意してください。そのような場合は、最初に画像のサイズを変更してから、関連する方法を適用する方が興味深いです。

于 2013-01-13T23:29:04.890 に答える