Những thuộc tính nào của một hình ảnh có thể được sử dụng để lập trình loại bỏ nó như là bad bad?


9

Tôi muốn có một quá trình xem xét nhanh hơn các bức ảnh của mình khi tôi đổ chúng từ máy ảnh vào máy tính. Chắc chắn có một số thông số mà tôi có thể trích xuất theo chương trình từ các bức ảnh và giá trị này có thể đủ để tự động đặt một số ảnh vào đống 'loại bỏ'.

Tôi đang suy nghĩ trong các thuật toán để phát hiện các cạnh, lấy độ sắc nét / độ mờ trung bình của hình ảnh hoặc một cái gì đó tương tự.

Tôi biết rằng kịch bản này sẽ không thực sự loại bỏ tất cả các bức ảnh xấu và giữ những bức ảnh đẹp, nhưng tôi hy vọng sẽ loại bỏ những bức ảnh hoàn toàn tào lao.

Tôi khá chắc chắn rằng tôi có thể lập trình một tập lệnh shell bằng ImageMagick (nhưng tôi mở bất kỳ phần mềm dòng lệnh nào) để có được những gì tôi cần. Vấn đề là tôi không biết nên tìm giá trị nào để có kết quả tốt hơn.

TLDR; Tôi nên tìm những thứ gì để có thể loại bỏ một hình ảnh theo chương trình (phát hiện cạnh, độ sắc nét)?

Tôi đang sử dụng Fedora Linux.

chỉnh sửa: Tôi không nghĩ câu hỏi này là một bản sao của Có phần mềm phân tích ảnh nào sẽ sắp xếp trước hình ảnh bằng cách xác định các sự cố kỹ thuật tiềm ẩn không? bởi vì câu hỏi đó yêu cầu đề xuất phần mềm và được đề nghị thay đổi dòng công việc trong câu trả lời (và sử dụng phần mềm không có sẵn trên linux), trong khi tôi đang hỏi điều gì sẽ cho kết quả tốt hơn trong việc phát hiện ảnh xấu.


3
Tôi rất vui mừng khi thấy câu trả lời cho điều này, nhưng tôi không chắc có một câu trả lời. Ví dụ, hãy tưởng tượng một bức ảnh ấn tượng về một con côn trùng hoặc đối tượng chuyển động khác trong đó 95% hình ảnh bị mờ hoặc mất nét. Có nhiều ví dụ khác trong đó việc đánh giá thẩm mỹ theo chương trình có thể loại bỏ nhầm một số hình ảnh đẹp nhất của bạn. Ở mức độ nào, tôi rất muốn xem điều này phát triển như thế nào.
AK


2
Tôi chắc chắn sẽ xem các điểm nổi bật thổi là một yếu tố.
ớt555

1
Bạn có thể phát hiện rung máy, phơi sáng trên / dưới đủ dễ dàng và nếu bạn thực sự thông minh, bạn có thể cố gắng xác định đối tượng của ảnh để kiểm tra xem nó có nằm trong tiêu cự hay không, nhưng đó là về nó.
Matt Grum

2
Ngay cả việc phát hiện phơi nhiễm dưới hoặc quá mức cũng khó khăn, bởi vì những trường hợp bạn muốn nó theo cách đó thì sao? Điều gì sẽ xảy ra nếu hình ảnh là phím cao hoặc thấp (để tạo hiệu ứng hoặc chỉ vì đó là cách cảnh quay).
Vui lòng đọc hồ sơ của tôi

Câu trả lời:


5

Một câu trả lời hợp lý cho điều này sẽ là "nó phụ thuộc" (một quan điểm khác là " chiến đấu một chút chống lại ý tưởng về số liệu khách quan ")

Tôi khuyên bạn nên tham khảo biểu đồ này để xác định thời gian bạn nên dành để cố gắng tìm ra cách nhanh hơn nếu 'sự nhanh chóng' là điều bạn đang tìm kiếm.

nhập mô tả hình ảnh ở đây

Tuy nhiên, nếu bạn quyết định tiếp cận điều này như một bài tập để hiểu phân tích hình ảnh tính toán, hãy xem OpenCV .

Để bắt đầu, có lẽ bạn sẽ cần một định nghĩa rõ ràng hơn về "hoàn toàn tào lao". Tôi muốn đề xuất một cách tiếp cận theo hướng dữ liệu; xem qua một mẫu hợp lý các hình ảnh của bạn theo cách thủ công, phân chia thành tốt / xấu / tào lao (G / B / C) để xem xét kỹ hơn bất kỳ tính năng nào có thể tách C khỏi G hoặc B, hãy cố gắng mô tả các tính năng này một cách đơn giản nhất có thể (ví dụ: mức độ màu, mờ, quá sáng, quá tối, vv +). dịch điều này sang các thuật ngữ OpenCV. viết một số mã để kiểm tra lý thuyết. phân loại. Lặp lại cho đến khi hài lòng.


1

Tùy thuộc vào ngôn ngữ bạn đang sử dụng OpenCV như được đề xuất ở trên hoặc đó là Emgu tương đương .net . Về cơ bản, bạn sẽ muốn Grayscale hình ảnh, sau đó sử dụng Laplacian Blur, sau đó lấy dữ liệu hình ảnh và kiểm tra hình ảnh để xem nếu nó nằm trong phạm vi ngưỡng. Nếu trong một phạm vi nhất định, hình ảnh không bị mờ, nếu hình ảnh nằm ngoài phạm vi đó, thì đó là.

Dưới đây là việc tôi thực hiện nhiều ảnh bằng 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

Điều này không trả lời câu hỏi, tôi nên tìm những thứ gì để có thể loại bỏ hình ảnh theo chương trình (phát hiện cạnh, độ sắc nét)? Điều này nghe có vẻ như là một thực hiện gợi ý trong một câu trả lời khác.
scottbb

Trước hết, tôi khuyên bạn không nên xóa bất cứ điều gì mà progam nói là mờ. Bởi vì nó không bao giờ hoàn hảo 100%. Các poster ban đầu nói để kiểm tra nếu nó xấu. Vì vậy, việc thực hiện này sẽ làm việc cho điều đó. Việc thực hiện này sử dụng phát hiện cạnh. Vấn đề là "xấu" rất đa dạng và khi tôi nghĩ xấu, tôi nghĩ mờ và nhiều thứ.
Simon Dolby

Nhưng có vẻ như một tác phẩm với một chủ đề nhỏ tập trung tốt, với nhiều độ mờ sáng tạo (Bo mạch), sẽ bị loại bỏ vì hầu hết mờ. Vì vậy, cố ý làm mờ thất bại kiểm tra này. (Tôi cũng đồng ý, tôi sẽ không xóa bất cứ điều gì chương trình nói với tôi là "xấu". Máy tính không thể diễn giải nghệ thuật tốt)
scottbb

Đó là một điểm rất công bằng liên quan đến mờ sáng tạo. Điều đó sẽ rất khó để sửa chữa. Tôi sẽ tưởng tượng, cố gắng tìm một phạm vi tốt bao gồm mờ sáng tạo. Hoặc tạo một thói quen riêng biệt để kiểm tra độ mờ sáng tạo, tất nhiên sẽ có một phạm vi riêng biệt. Phạm vi của tôi đã được tạo do kết quả của 40 hình ảnh mờ được kiểm tra.
Simon Dolby

1

ImageMagick là bạn của bạn ở đây. Bạn sẽ viết rất nhiều kịch bản gọi đó là prorrams.

Ví dụ: Số học hình ảnh:

Lấy hình ảnh. Làm mờ nó sang một hình ảnh mới. Trừ hình ảnh 2 từ hình ảnh 1, lấy giá trị tuyệt đối của kết quả. Tính tổng các pixel của kết quả và trung bình. Ngưỡng.

Một hình ảnh sắc nét khác biệt đáng kể so với hình ảnh mờ và do đó giá trị trung bình của phép trừ sẽ cao.

Một hình ảnh mờ ít khác nhiều so với một hình ảnh mờ mờ.

Như một trong những ý kiến ​​cho câu trả lời khác chỉ ra, đôi khi một hình ảnh bị làm mờ một cách cố ý. Một số người thực sự thích Bo mạch. Vì vậy, đặt một bước khác vào và lấy một phần ba hoặc giữa của hình ảnh.


Lấy biểu đồ của hình ảnh. Nếu hơn X% số pixel bị bão hòa (> 248) cho bất kỳ kênh nào, thì các điểm nổi bật sẽ bị thổi.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.