エントロピーに基づくスマートクロップ

多くのWebアプリケーションでは、ダウンロードした写真からアバターを切り取ったり、大きな画像をプレビューしたり、大きなギャラリーでサムネイルを作成したりする自動トリミングが必要です。



しかし、車はまだ人ではなく、希望するエリアが常に切り取られるわけではありません。 左上隅または中央から100x100のサムネイルを切り取るなどの古い方法は背景にフェードインし、スマートクロップがアリーナに入ります。

伝統的なスマートクロップ


ほとんどのライブラリは、スマートクロップを使用して、写真の歪みや伸縮を防ぎます。 一番下の行では、最初にコードが画像のサイズを変更して、パラメーターの1つ(長さまたは幅)が指定されたパラメーターと一致するようにします。 次に、2番目のパラメーターが指定されたパラメーターと一致するかどうかを確認します。 そうでない場合、中心から始まる余分な領域のトリミングが実行されます。

たとえば、400x400のサムネイルを作成すると、次のようになります。



キャッチは、常に(または、ほとんど決して)最も重要なものが中心にあるということではありません。 ほとんどの場合-主なものの一部ですが、ほとんどの場合、オブジェクトは何らかの方法で移動します。

エントロピースマートクロップ


一般的な考え方は、最も多くの情報を伝える画像の断片を見つけて、それをトリミングされたバージョンで保存することです。

仕組み


まず、画像のサイズが変更されます。

次に、境界を決定するためにフィルターが実行されます。 画像は白黒になり、オブジェクトの輪郭のみが残ります。

彩度は可能な限り低減され、画像はやや「ぼやけ」ます。

エントロピーが最も高いフラグメント、つまり、輪郭の数が最も多いフラグメントが決定されます。 このフラグメントの座標が返されます。つまり、どのような場合でもトリミングできない画像の部分が返されます。


最も困難な段階は、最高のエントロピーを持つフラグメントの検索です。 検索は断片化されています-画像は25個のストリップに「カット」され、それぞれのエントロピーが計算されて比較されます。 次に、最大エントロピーを持つグループが決定されます。

申込み


このライブラリを使用するのに便利です。
要件:PHP 5.3とImagick拡張機能。 3段階で適用されます。

初期化:

$center = new CropEntropy($imagePath); 

サイズ変更とトリミング:

 $croppedImage = $center->resizeAndCrop($width, $height); 

新しい画像を保存する:

 $croppedImage->writeimage($newImagePath); 


ここで 、必要なサムネイルのサイズを設定することにより、エントロピーに基づいてトリミングを試すことができます。
時々、アルゴリズムは最も重要な領域を正確に識別します。 しかし、特に非標準-非正方形のクロップパラメーター(300x100)で、それ時々 間違っています。 しかし、同じパラメーターで異なる写真を使用した非常に良い結果です。 このアルゴリズムは理想的な結果を保証するものではありませんが、それでもオートクロップの最良の方法の1つです。

アブストラクト


  1. 作物を自動化する最良の方法の1つは、エントロピーベースの作物です。
  2. アルゴリズムは、最も多くの情報を持つフラグメントを決定し、トリミングされたバージョンで保存します。
  3. メソッドの長所と短所は、 このツールで確認できます。

Source: https://habr.com/ru/post/J259997/


All Articles