どのように私はPHPでより高いコントラストで画像を選ぶことができますか?
質問
Iは、画像からXランダムサムネイル(作物、なしリサイズ)をとり、コントラストのためにそれらを分析し、最も高いコントラストを有するものを選択するアルゴリズムを開発したいサムネイルエンジン用。私はPHPとImagickで働いているが、私は画像のコントラストを計算する方法についていくつかの一般的なヒントのために喜んでいるだろう。
多くのものは色、コンピューティング光度などを数える例えば、コントラストを計算するよりも簡単であることを思わます。
あなたの経験は、映像素材の分析とは何ですか?
解決
私はそれをそのように(擬似コード)を行うと思います:
L[256] = {0,0,0...}
loop over each pixel:
luminance = avg(R,G,B)
increment L[luminance] by 1
for i = 0 to 255:
if L[i] < C: L[i] = 0 // C = threshold of your chose
find index of first and last non-zero value of L[]
contrast = last - first
他のヒント
の画像を探していて、「最高のコントラストで、」あなたは、画像のコントラストを定義する方法に非常に注意する必要があります。最も簡単な方法では、コントラストが最も低い強度と画像内の最高強度との差です。それはあなたのケースで非常に有用であることを行っていません。
私はあなたが与えられた画像のコントラストを説明し、その後、あなたはそれを定義するよう、最高のコントラストで画像を決定するためにヒストグラムの特性を比較するために、ヒストグラムのアプローチを使用することをお勧め。あなたの特定のニーズを満たすために、コードにヒストグラムを表し、またはクラスを構築するためによく知られている様々な容器を使用することができます。あなたは、コントラストの尺度として直接各ヒストグラムの分散を使用することができ、または場合は、標準偏差を使用 - (強度値のちょうど統計的表現。私はあなたのチャートの形でヒストグラムを作成する必要があることを意味しているわけではありません)それはで動作するように簡単です。
キーは本当にあなたが画像のコントラストを定義する方法です。一般的に、私は、ほぼすべての可能な値をすべてのための本値を持つものとして、高コントラストの画像を定義する、またはだろう。私は、さらに高コントラスト画像のこの定義では、画像の輝度値が均一な方法で可能な値の範囲にわたって分布する傾向があることを追加することになります。
このアプローチを使用して、低コントラスト画像は、比較的少数の離散的な強度値を有する傾向があるであろうと、それらは密接に均一に分布するのではなく、一緒にグループ化される傾向にあるであろう。 (原則として、それらはまた、範囲の中心に向かってグループ化する傾向がある。)