Pytanie:
Jakie właściwości obrazu można wykorzystać do programowego odrzucenia go jako „złego”?
Carlos Campderrós
2015-06-03 02:17:36 UTC
view on stackexchange narkive permalink

Chciałbym mieć szybszy proces sprawdzania moich zdjęć po zrzuceniu ich z aparatu do komputera. Z pewnością są pewne parametry, które mogę programowo wyodrębnić ze zdjęć i ta wartość może wystarczyć do automatycznego umieszczenia niektórych zdjęć na stosie „odrzuconych”.

Myślę o algorytmach wykrywania krawędzi, uzyskiwania średniej ostrość / rozmycie obrazu lub coś w tym stylu.

Wiem, że ten skrypt tak naprawdę nie odrzuci wszystkich złych zdjęć i zatrzyma dobre, ale mam nadzieję, że odrzucę te całkowicie gówniane.

Jestem prawie pewien, że mogę zaprogramować skrypt powłoki za pomocą ImageMagick (ale jestem otwarty na każde oprogramowanie wiersza poleceń), aby uzyskać to, czego potrzebuję. Problem polega na tym, że nie wiem, jakich wartości powinienem szukać, aby uzyskać lepsze wyniki.

TLDR; na co powinienem zwrócić uwagę, aby móc programowo odrzucić obraz (wykrywanie krawędzi, ostrość)?

Używam Fedory Linux.

edycja: Nie sądzę, że to pytanie jest duplikatem Czy istnieje oprogramowanie do analizy zdjęć, które wstępnie posortuje obrazy, identyfikując potencjalne problemy techniczne?, ponieważ to pytanie wymaga rekomendacji oprogramowania i sugeruje się zmianę przepływu pracy w odpowiedziach (i użycie oprogramowania który nie jest dostępny na Linuksie), a ja pytam, co da lepsze rezultaty w wykrywaniu złych zdjęć.

Byłbym podekscytowany, widząc odpowiedź na to pytanie, ale nie jestem pewien, czy istnieje. Na przykład wyobraź sobie dramatyczne zdjęcie owada lub innego poruszającego się obiektu, na którym 95% obrazu jest rozmyte lub nieostre. Istnieje wiele innych przykładów, w których programowa ocena estetyki może błędnie wyeliminować niektóre z najlepszych zdjęć. W każdym razie chciałbym zobaczyć, jak to się zmienia.
@AK Tak, wiem, że będą fałszywe pozytywy, ale w przypadku zdjęć, które są naprawdę złe (z moim słabym doświadczeniem i fotografowaniem obiektywami manualnymi, mam mnóstwo bzdurnych zdjęć), będzie to służyć do oddzielenia ich od tych niezłych
możliwy duplikat [Czy istnieje oprogramowanie do analizy zdjęć, które wstępnie sortuje obrazy, identyfikując potencjalne problemy techniczne?] (http://photo.stackexchange.com/questions/20432/is-there-photo-analysis-software-which-will -pre-sort-images-by-identifying-poten)
Nie sądzę, aby to było duplikatem, ponieważ jest to pytanie, czego szukałoby takie oprogramowanie, a nie zalecenie dotyczące oprogramowania. Jednak pamiętam inny, który wydawał się podobny ...
Z pewnością spojrzałbym na zdmuchnięte pasemka jako czynnik.
Niektóre aparaty zawierają [ostrzeżenia] (http://www.exiv2.org/tags-fujifilm.html) w informacjach EXIF, np. _Blur_, _focus_ lub _exposure_ warning. Czytanie ich przy użyciu tej bezpłatnej / komercyjnej biblioteki C ++ i decydowanie o nich może również pomóc.
Możesz łatwo wykryć drgania aparatu, prześwietlenie / niedoświetlenie, a jeśli jesteś naprawdę sprytny, możesz spróbować zidentyfikować obiekt zdjęcia, aby sprawdzić, czy jest ostry, ale to wszystko.
możliwy duplikat [Jakich parametrów mogę użyć do oceny „Percepcyjnej jakości obrazu”?] (http://photo.stackexchange.com/questions/10413/what-parameters-can-i-use-to-evaluate-a- jakość obrazu percepcyjnego)
Również [Jak mogę uzyskać obiektywne, numeryczne pomiary jakości obrazu dla moich zdjęć?] (Http://photo.stackexchange.com/questions/11698/how-can-i-get-objective-numerical-image-quality-measurements- dla-moich-zdjęć)
Chociaż tak naprawdę podoba mi się twoje sformułowanie tutaj bardziej niż inne.
Nawet wykrycie niedostatecznej lub nadmiernej ekspozycji jest trudne, ponieważ co z przypadkami, w których chciałeś tego w ten sposób? A co, jeśli obraz jest wysoki lub niski (dla efektu lub po prostu dlatego, że taka była scena).
Ponieważ zależy to tak bardzo od intencji strzelca, byłoby interesujące zaimplementować pewnego rodzaju analizę [SpamAssassin] (https://spamassassin.apache.org/) w stylu obrazów odrzuconych przez użytkownika ... FAIK, może ktoś ma ...
Trzy odpowiedzi:
zzkt
2015-06-09 14:00:33 UTC
view on stackexchange narkive permalink

Rozsądną odpowiedzią byłoby „to zależy” (inną perspektywą jest „ trochę zmierzyć się z ideą obiektywnych wskaźników”).

Polecam konsultację ten wykres, aby określić, ile czasu należy poświęcić na szybsze ustalenie, czy „szybkość” jest tym, czego szukasz.

enter image description here

Jeśli jednak zdecydujesz się potraktować to jako ćwiczenie w zrozumieniu obliczeniowej analizy obrazu, spójrz na OpenCV.

Na początek prawdopodobnie będziesz potrzebować jaśniejszej definicji „totalnie bzdury”. Sugerowałbym podejście oparte na danych; przejrzyj rozsądną próbkę swoich obrazów ręcznie, z grubsza podziel na dobre / złe / gówniane (G / B / C) przyjrzyj się bliżej cechom, które mogą oddzielić C od G lub B, spróbuj opisać te cechy tak prosto, jak to możliwe (np. poziomy kolorów, rozmazane, zbyt jasne, zbyt ciemne itp. +). przetłumacz to na warunki OpenCV. napisz kod, aby przetestować teorię. klasyfikować. powtarzaj, aż będziesz zadowolony.

Simon Dolby
2018-01-04 02:42:05 UTC
view on stackexchange narkive permalink

W zależności od języka, którego używasz OpenCV, jak zasugerowano powyżej, lub jego odpowiednika .net Emgu. Zasadniczo będziesz chciał przeskalować obraz w skali szarości, a następnie użyć rozmycia laplackiego, a następnie pobrać dane obrazu i sprawdź obraz, aby zobaczyć, czy mieści się w zakresie progowym. Jeśli znajduje się w pewnym zakresie, obraz nie jest zamazany, jeśli jest poza tym zakresem, tak jest.

Poniżej znajduje się moja implementacja wielu zdjęć przy użyciu VB.net

  Public Sub GetBlur () Dim List As String () = Directory.GetFiles ("E: \ Dartmoor \ "," * .JPG ") For Index As Integer = 1 do 2000 Dim imgfile As String = List (Index) Dim Image As Drawing.Bitmap = Drawing.Bitmap.FromFile (imgfile) Dim img As Image (Of Gray, Byte) = Nowy obraz (w kolorze szarym, bajt) (obraz) Współczynnik wymiaru 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 Wtedy maxLap = MyByte End If Next If maxLap > 300 Lub maxLap < 150 Then List (Index) = imgfile & "jest rozmyty" W przeciwnym razie List (Index) = imgfile & "nie jest rozmyty" End If '' To zapisuje lokalizację, w której użytkownik aktualnie się znajduje, jeśli musi wstrzymać imgGray.Dispose () img.Dispose () imgTmp.Dispose () imgB.Dispose () Dalej Używanie sw As StreamWriter = New StreamWriter ("Result.txt") For i As Integer = 1 do 2000 sw.WriteLine (List (i)) Next End UsingEnd Sub  
To nie odpowiada na pytanie, _ jak powinienem wyglądać, aby móc programowo odrzucić obraz (wykrywanie krawędzi, ostrość)? _ To brzmi jak implementacja sugestii w innej odpowiedzi.
Przede wszystkim radziłbym nie usuwać niczego, co według programu jest niewyraźne. Ponieważ nigdy nie jest w 100% doskonały, oryginalny plakat miał sprawdzić, czy jest zły. Więc ta implementacja zadziała. Ta implementacja wykorzystuje wykrywanie krawędzi. Problem w tym, że „zły” jest bardzo zróżnicowany, a kiedy myślę źle, myślę, że jest niewyraźny i takie tam.
Wydaje się jednak, że kompozycja z niewielkim, dobrze wyostrzonym tematem, z dużą ilością kreatywnego rozmycia (bokeh), zostałaby wyrzucona jako przeważnie rozmyta. Tak więc _celowe_ rozmycie nie powiedzie tego testu. (Zgadzam się również, nie usuwałbym niczego, co program powiedział mi, że jest „zły”. Komputery nie potrafią dobrze interpretować sztuki)
To bardzo słuszna uwaga dotycząca kreatywnego rozmycia. To będzie bardzo trudne do naprawienia. Wyobrażam sobie, próbując znaleźć dobry zakres obejmujący kreatywne rozmycie. Lub stworzenie osobnej procedury, która sprawdza kreatywne rozmycie, które oczywiście miałoby oddzielny zakres. Mój zakres powstał w wyniku sprawdzenia 40 rozmyć zdjęć.
Sherwood Botsford
2018-04-09 05:02:51 UTC
view on stackexchange narkive permalink

ImageMagick jest tutaj twoim przyjacielem. Będziesz pisać wiele skryptów, które nazywają to prorrams.

Np. Arytmetyka obrazu:

Weź obraz. Rozmyj go do nowego obrazu Odejmij obraz 2 od obrazu 1, biorąc wartość bezwzględną wyniku. Zsumuj piksele wyniku i średnią. p>

Ostry obraz znacznie różni się od zamazanego obrazu, dlatego średnia wartość odejmowania będzie wysoka.

Rozmyty obraz znacznie mniej różni się od rozmytego obrazu.

Jak wskazuje jeden z komentarzy do innej odpowiedzi, czasami obraz jest celowo rozmyty. Niektórzy lubią efekt bokeh. Zrób więc kolejny krok i zrób środkową trzecią lub środkową ćwiartkę obrazu.


Weź histogram obrazu. Jeśli więcej niż X% pikseli jest nasyconych (> 248) dla dowolnego kanału, rozjaśnienia są rozjaśniane.




To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...