PDA

Zobacz pełną wersję : Wykrywanie najostrzejszego zdjęcia w serii...



cahe
16-06-2008, 19:16
Witam ;-),

Temat jest dla ludzi o slabych możliwościach finansowych, takich jak ja - będzie troszkę o radzeniu sobie bez systemu VR w trudnych sytuacjach. Zdarzało Wam się na pewno robić zdjęcia na granicy możliwości utrzymania zdjęcia z ręki (np. ostatnio w słabych warunkach cykałem 50/1.8 z czasami 1/15) - wiadomo, nie każde zdjęcie wychodzi wtedy ostro. Co robię? Ratuje się zdjęciami seryjnymi! Nie od kozery mam te 5 klatek na sekundę, nie? Seria 5 zdjęć przeważnie wystarcza, aby przynajmniej jedno z nich było ostre. Powstaje natomiast problem - po takiej sesji, kończymy z 5x więcej zdjęć niż jest to potrzebne, dlatego zainteresowałem się następującą rzeczą:

- Czy da się w jakiś sposób wykryć, które zdjęcie z serii jest najbardziej ostre?
Odp: Jasne, że tak! Kompakty Nikona robią to od dawna!

Pytanie tylko, czy jest jakieś oprogramowanie, w które wrzucam 10 fotek tego samego tematu, a ono po sekundzie wypluwa mi jedno, najostrzejsze, a reszte kasuje :-). Nie chce mi się tego robić ręcznie.

W sumie, po kilkunastu minutach szukania, postanowiłem, ze napiszę coś takiego sam. Pierwsze wyniki - obiecujące! Testowałem na tym samym zdjęciu, w trzech wersjach: 1. potraktowanej blurem 2. normalnej 3. sztucznie wyostrzonej. Wyniki:



Blurred 17839,55
Normal 47947,58
Sharpened 67035,05Najwięcej "punktów" dostało zdjęcie wyostrzone, natomiast Blurred, zdecydowanie najmniej :-). Jest sens to dalej rozwijać? Może komuś się przyda? A może niepotrzebnie straciłem właśnie 2 godziny, bo istnieje już takie narzędzie? Wypowiedzcie się.

ku6i
18-06-2008, 14:34
Możesz rozwinąc dokładniej w czym piszesz, w jaki sposób analizujesz ostrość zdjęcia?

cahe
18-06-2008, 21:10
Jeśli kogoś to interesuje, to mogę nawet cały kod źródłowy władować. Generalnie rzecz biorąc - staram się wykryć kontrasty na zdjęciu - im większe różnice w jasności między pikselami które są obok siebie, tym więcej "punktów" dostaje obrazek.

velaskez
18-06-2008, 21:32
ciekawe, ciekawe, w czym piszesz? i w ogóle jako program osobny czy wtyczka

cahe
18-06-2008, 22:16
W sumie na razie kod jest tak prosty, że można go portować na dowolny język. Ja użyłem Java + ImageIO, bo akurat było pod ręką ;-).

kh29228
19-06-2008, 01:13
a mógłbyś podesłać takie coś w formie użytecznej dla kompletnego laika pod względem programowania:)

pozdro

cahe
19-06-2008, 09:02
Tak, z tym, że na razie program nie jest skończony - np. nie ma w ogóle interfejsu użytkownika. Fajnie by było dodać do niego jakiś automat do wykrywania podobnych zdjęć, żeby sam wiedział, gdzie się zaczyna a gdzie kończy seria. Macie na to jakiś pomysł?

elix
19-06-2008, 09:38
Fajnie by było dodać do niego jakiś automat do wykrywania podobnych zdjęć, żeby sam wiedział, gdzie się zaczyna a gdzie kończy seria. Macie na to jakiś pomysł?

Jedyne co mi w tym momencie przychodzi do głowy:

1. Porównywanie histogramów - tu jednak jest pewne niebezpieczeństwo bo możemy sobie wyobrazić obrazki o podobnych histogramach które są kompletnie różne.

1. Odejmowanie od siebie cropów obrazka (lub całego obrazka) - teoretycznie w przypadku idealnym (porównanie tego samego obrazka ze sobą) takie odejmowanie da ci w wyniku zero - w przypadku obrazków podobnych wynik odejmowania powinien być tym mniejszy im bardziej podobne obrazki należałoby ustawić więc jakiś próg.
Ja w tym przypadku wziąłbym np 2 losowo wybrane cropy 100x100 px.

2. Wyszukiwanie podobnych kształtów na obrazie - algorytmowo jest to trudniejsze rozwiązanie i jestem w stanie wyobrazić sobie słabe strony takiego podejścia.

Erie
19-06-2008, 09:52
a może do wykrywania podobieństwa zdjęć wykorzystać transformatę Fouriera i porównywać widma?

jeśli zaś chodzi o "best shot selector" to jeszcze uwzględnij pole AFa (lub po prostu ogranicz się do konkretnego cropa, np. centralnej części) - nietrudno sobie bowiem wyobrazić zdjęcie, gdzie ostry jest inny plan niż zakładany i który będzie miał mnóstwo wyraźnych krawędzi i w rezultacie da Ci bardzo wysoki wynik, ale nie będzie to pożądany efekt

pebees
19-06-2008, 09:58
Fajnie by było dodać do niego jakiś automat do wykrywania podobnych zdjęć, żeby sam wiedział, gdzie się zaczyna a gdzie kończy seria. Macie na to jakiś pomysł?
Może po prostu sprawdzać po exifowych timestampach? :D

MsbS
19-06-2008, 10:01
Co do uwagi Eriego (wybacz, jeśli źle odmieniam nicka) i transformaty Fouriera - to faktycznie wygląda na niezły pomysł. Ostry obrazek = ostrzejsze krawędzie. Co z tego wynika, będzie więcej wysokich częstotliwości. Na pewno można ściągnąć z netu biblioteki które same przeliczą transformatę Fouriera z podanych danych (np. obrazka). Słowo kluczowe to DFT - Discrete Fourier Transform, albo FFT - Fast Fourier Transform.

A co do porównywania obrazków i wykrywania początku i końca serii - można policzyć funckję korelacji wzajemnej. Wzory łatwo wyguglać, nie ma tam operacji bardziej skomplikowanych niż pierwiastkowanie. Na pewno można też skądś zassać gotowy kod.