プログラムで「不良」として破棄するために、画像のどのプロパティを使用できますか?


9

写真をカメラからコンピューターにダンプするときに、写真のレビュープロセスを早くしたいのですが。確かに、プログラムから写真から抽出できるいくつかのパラメータがあり、この値は一部の写真を自動的に「破棄」パイルに入れるのに十分な場合があります。

エッジを検出し、画像の平均的なシャープネス/ぼやけを取得するアルゴリズムを考えています。

このスクリプトでは、悪い写真がすべて破棄されて良い写真が保持されるわけではないことはわかっていますが、まったくがらくた写真を破棄したいと思っています。

ImageMagickを使用してシェルスクリプトをプログラミングできると確信しています(ただし、コマンドラインソフトウェアは開いています)。問題は、より良い結果を得るためにどの値を探すべきかわからないことです。

TLDR; プログラムで画像を破棄できるようにするにはどうすればよいですか(エッジ検出、シャープネス)?

Fedora Linuxを使用しています。

編集:この質問は重複していると思いません。潜在的な技術的な問題を特定することによって画像を事前にソートする写真分析ソフトウェアはありますか?なぜなら、その質問はソフトウェアの推奨を求めており、回答のワークフローを変更すること(およびLinuxでは利用できないソフトウェアを使用すること)が提案されている一方で、悪い写真を検出するのにより良い結果が得られるものを求めているからです。


3
これに対する答えを見て興奮しますが、その答えがあるかどうかはわかりません。たとえば、イメージの95%がぼやけている、または焦点が合っていない、昆虫またはその他の動く被写体の劇的な写真を想像してみてください。プログラムによって美学を評価することで、最良の画像の一部が誤って削除される可能性がある他の多くの例があります。とにかく、これがどのように進化するか見てみたいです。
AK


2
私は確かに要因として吹き飛ばされたハイライトを見ます。
chili555

1
カメラの揺れ、露出オーバー/露出不足を簡単に検出できます。本当に賢い場合は、写真の被写体を特定して、ピントが合っているかどうかをテストできますが、それはそれだけです。
Matt Grum

2
露出不足または露出過度を検出することも困難です。そのようにしたい場合はどうでしょうか。画像がハイキーまたはローキーである場合はどうなりますか(効果のため、または単にシーンがそうであったため)。
プロフィールをお読みください

回答:


5

これに対する合理的な答えは「依存する」です(別の見方は「客観的な測定基準のアイデアと少し戦う」です)

この表を参考にして、「迅速さ」が求めているものである場合、より迅速な方法を理解するために費やす必要がある時間を判断することをお勧めします。

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

ただし、計算画像分析を理解するための演習としてこれに取り組む場合は、OpenCVを参照してください。

最初に、「完全にがらくた」の明確な定義がおそらく必要になります。データ駆動型のアプローチをお勧めします。手作業で画像の適切なサンプルを調べ、大まかにgood / bad / crap(G / B / C)に分けて、CをGまたはBから分離する可能性のある機能を詳しく調べます。これらの機能をできるだけ簡単に説明してください(例:色のレベル、ぼやけている、明るすぎる、暗すぎるなど)。これをOpenCV用語に変換します。理論をテストするためのコードを記述します。分類する。満足するまで繰り返します。


1

上で提案したようにOpenCVを使用している言語、または.net同等のEmguによって異なります。基本的には、画像をグレースケールし、ラプラシアンブラーを使用して、画像データを取得し、画像をチェックして、しきい値の範囲内にあるかどうかを確認します。特定の範囲内にある場合、画像はぼやけていません。画像がその範囲外にある場合は、ぼやけています。

以下は、VB.netを使用した複数の写真の私の実装です

  Public Sub GetBlur()
    Dim List As String() = Directory.GetFiles("E:\Dartmoor\", "*.JPG")


    For Index As Integer = 1 To 2000
        Dim imgfile As String = List(Index)
        Dim Image As Drawing.Bitmap = Drawing.Bitmap.FromFile(imgfile)
        Dim img As Image(Of Gray, Byte) = New Image(Of Gray, Byte)(Image)
        Dim factor As Single()
        Dim imgB As Drawing.Bitmap = New Drawing.Bitmap(imgfile)
        imgB = New Drawing.Bitmap(imgB)
        Dim imgGray As Image(Of Gray, Byte) = img.Convert(Of Gray, Byte)()
        Dim imgTmp As Image(Of Gray, Single) = imgGray.Laplace(1)
        Dim maxLap As Short = -32767
        For Each MyByte As Single In imgTmp.Data
            If MyByte > maxLap Then

                maxLap = MyByte

            End If
        Next

        If maxLap > 300 Or maxLap < 150 Then
            List(Index) = imgfile & " is blurry"

        Else
            List(Index) = imgfile & " isn't blurry"
        End If

        '    'This saves the location of where the user is currently if they need to pause





        imgGray.Dispose()
        img.Dispose()
        imgTmp.Dispose()
        imgB.Dispose()

    Next
    Using sw As StreamWriter = New StreamWriter("Result.txt")
        For i As Integer = 1 To 2000
            sw.WriteLine(List(i))
        Next
    End Using
End Sub

これは質問に答えません、プログラムで画像を破棄できるようにするにどうすればよいですか(エッジ検出、シャープネス)?これは、別の回答での提案の実装のように聞こえます。
scottbb 2018年

まず、プログラムがぼやけていると言っているものは削除しないことをお勧めします。それは決して100%完璧ではないからです。元のポスターはそれが悪いかどうかを確認すると述べた。したがって、この実装はそのために機能します。この実装では、エッジ検出を使用します。問題は、「悪い」は非常に多様であり、私が悪いと思うとき、ぼやけているようなものだと思います。
Simon Dolby

しかし、よく焦点が絞られた小さな主題と、たくさんの創造的なぼやけ(ボケ)のある構図は、ほとんどぼやけていると思われます。したがって、意図的なぼかしはこのチェックに失敗します。(私も同意します。プログラムが「悪い」と言ったプログラムは削除しません。コンピューターはアートをうまく解釈できません)
scottbb

それはクリエイティブなぼかしに関して非常に公平なポイントです。それを修正するのは非常に難しいでしょう。クリエイティブなぼかしを含む良い範囲を見つけようとすることは想像できるでしょう。または、もちろん別の範囲を持つクリエイティブなぼやけをチェックする別のルーチンを作成します。私の範囲は、40枚の画像のぼかしチェックの結果として作成されました。
Simon Dolby

1

ImageMagickはあなたの友達です。あなたはそれをプロラムと呼ぶ多くのスクリプトを書こうとしている。

例:画像演算:

画像を撮ります。新しい画像にぼかします。結果の絶対値を取得して、画像1から画像2を減算します。結果のピクセルを合計し、平均します。しきい値。

鮮明な画像はぼやけた画像とはかなり異なるため、減算の平均値は高くなります。

ぼやけた画像は、ぼやけたぼやけた画像とほとんど変わりません。

別の回答に対するコメントの1つが指摘しているように、画像が意図的にぼやけていることがあります。一部の人々は実際にボケが好きです。それで、もう一歩踏み込んで、画像の真ん中の3分の1または中央の4分の1を撮ります。


画像のヒストグラムを取ります。ピクセルのX%を超えるピクセルが飽和(> 248)している場合、ハイライトが吹き飛ばされます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.