上で提案したように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