Jak wyostrzyć obraz w OpenCV?

Jak wyostrzyć obraz za pomocą OpenCV ? Istnieje wiele sposobów wygładzania lub rozmycia, ale nie widziałem wyostrzania.

Author: Jav_Rock, 2011-02-14

5 answers

Jedna ogólna procedura jest określona w artykule Wikipedii na temat maskowania unsharp : Używasz filtra wygładzającego Gaussa i odejmujesz wersję wygładzoną od oryginalnego obrazu (w sposób ważony, dzięki czemu wartości stałego obszaru pozostają stałe).

Aby uzyskać wyostrzoną wersję frame do image: (obie cv::Mat)

cv::GaussianBlur(frame, image, cv::Size(0, 0), 3);
cv::addWeighted(frame, 1.5, image, -0.5, 0, image);

Parametry jest coś, co musisz dostosować dla siebie.

Jest też laplacian ostrzenie, powinieneś coś na tym znaleźć kiedy wygooglujesz.

 141
Author: etarion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-14 15:36:19

Możesz wypróbować proste jądro i filter2D funkcja, np. w Pythonie:

kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
im = cv2.filter2D(im, -1, kernel)

Wikipedia ma dobry przegląd jąder z kilkoma przykładami tutaj - https://en.wikipedia.org/wiki/Kernel_ (image_processing)

W przetwarzaniu obrazu jądro, macierz splotu lub maska jest małą macierzą. Służy do rozmycia, ostrzenia, wytłaczania, wykrywania krawędzi i innych. Osiąga się to poprzez zrobienie splotu pomiędzy jądrem i obraz.

 20
Author: Brian Burns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-12 10:26:18

Przykładowy kod dotyczący wyostrzania obrazu za pomocą algorytmu "unsharp mask" można znaleźć w dokumentacji OpenCV

Zmiana wartości sigma,threshold,amount Da różne wyniki

// sharpen image using "unsharp mask" algorithm
Mat blurred; double sigma = 1, threshold = 5, amount = 1;
GaussianBlur(img, blurred, Size(), sigma, sigma);
Mat lowContrastMask = abs(img - blurred) < threshold;
Mat sharpened = img*(1+amount) + blurred*(-amount);
img.copyTo(sharpened, lowContrastMask);
 12
Author: sturkmen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-28 12:52:28

Dla jasności w tym temacie, kilka punktów naprawdę powinno być:

  1. Wyostrzanie zdjęć to problem źle postawiony. Innymi słowy, rozmycie jest operacją stratną, a powrót z niej jest ogólnie niemożliwy.

  2. Aby wyostrzyć pojedyncze obrazy, musisz w jakiś sposób dodać ograniczenia (założenia), jakiego rodzaju obrazu chcesz i jak został zamazany. Jest to obszar naturalnej statystyki obrazu. Podejścia do wyostrzania posiadają te statystyki jawnie lub niejawnie w swoich algorytmach (deep learning jest najbardziej niejawnie zakodowany). Wspólne podejście do ważenia niektórych poziomów psa lub Laplacian rozkładu piramidy , które jest uogólnieniem Briana Burnsa odpowiedzi, zakłada, że Gaussian rozmycie uszkodzone obraz, i jak waga jest zrobione jest związane z założeniami na to, co było w obrazie na początku.

  3. Inne źródła informacji mogą spowodować wyostrzenie problemu dobrze pozowane. Powszechnym takim źródłem informacji jest wideo poruszającego się obiektu lub ustawienie wielu widoków. Wyostrzanie w tym ustawieniu jest zwykle nazywane superrozdzielczością (co jest bardzo złą nazwą, ale utkwiło w kręgach akademickich). Od dawna w OpenCV istnieją metody superrozdzielczości.... chociaż zwykle nie działają tak dobrze na prawdziwe problemy ostatnio sprawdziłem je. Spodziewam się, że głębokie uczenie przyniosło wspaniałe rezultaty również tutaj. Może ktoś napisze w komentarzach, co się tam opłaca.

 0
Author: Stefan Karlsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-21 11:26:33

Spróbuj z tym:

cv::bilateralFilter(img,9,75,75);

Możesz znaleźć więcej informacji tutaj

 -4
Author: mch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-02 11:38:06