/ / Jak działa splot 2D dla obrazów? - obraz, przetwarzanie obrazu, przetwarzanie sygnału

Jak działa splot 2D dla obrazów? - obraz, przetwarzanie obrazu, przetwarzanie sygnału

Studiuję przetwarzanie obrazów w tych dniach i jajestem początkującym w temacie. Utknąłem na temat splotu i tego, jak go zaimplementować do obrazów. Powiem krótko - istnieje ogólna formuła splotu dla obrazów takich jak:

Formuła konwolucji

x(n1,n2) reprezentuje piksel w wyjściowym obrazie, ale nie wiem co k1 i k2 oznaczać. Właściwie to właśnie chcielibyśmy się uczyć. Aby to zaimplementować w jakimś języku programowania, muszę wiedzieć co k1 i k2 oznaczać. Czy ktoś może mi to wytłumaczyć lub poprowadzić do artykułu? Byłbym wdzięczny za każdą pomoc.

Odpowiedzi:

3 dla odpowiedzi № 1

Konwolucji w tym przypadku zajmuje się wyodrębnianie łat pikseli obrazu, które otaczają piksel obrazu docelowego. Podczas wykonywania zwoju obrazu wykonuje się to, co jest znane jako maska lub funkcja rozproszenia punktu lub jądro zazwyczaj jest to znacznie mniej niż rozmiar samego obrazu.

Dla każdego docelowego piksela obrazu w wyjściowym obrazie,pobieramy sąsiedztwo wartości pikseli z danych wejściowych, w tym piksel o tych samych współrzędnych docelowych w danych wejściowych. Rozmiar tej okolicy pokrywa się z dokładnie tym samym rozmiarem co maska. W tym momencie ty obracać się maskę tak, że ma 180 stopni, a następnie wykonajmnożenie element po elemencie każdej wartości w masce z wartościami pikseli, które są zbieżne w każdej lokalizacji w sąsiedztwie. Dodajecie wszystkie te wartości, a to jest wynik dla docelowego piksela w obrazie docelowym.

Na przykład, powiedzmy, że miałem ten mały obraz:

1   2   3   4   5
6   7   8   9  10
11  12 13  14  15
16  17 18  19  20
21  22 23  24  25

Powiedzmy, że chciałbym wykonać uśrednienie w oknie 3 x 3, więc moja maska ​​byłaby:

    [1  1  1]
1/9*[1  1  1]
[1  1  1]

Aby wykonać splot obrazu 2D, obróćmaska ​​o 180 stopni wciąż daje nam tę samą maskę, więc powiedzmy, że chciałbym znaleźć wyjście w rzędzie 2, kolumnie 2. Pobyt 3 x 3 wyodrębniłbym:

1  2  3
6  7  8
11 12 13

Aby znaleźć wyjście, pomnożę każdą wartość w masce przez tę samą lokalizację sąsiedztwa:

[1  2  3 ]           [1 1 1]
[6  7  8 ]  ** (1/9)*[1 1 1]
[11 12 13]           [1 1 1]

Wykonaj mnożenie punkt po punkcie, a dodanie wartości da nam:

1(1/9) + 2(1/9) + 3(1/9) + 6(1/9) + 7(1/9) + 8(1/9) + 11(1/9) + 12(1/9) + 13(1/9) = 63/9 = 7

Dane wyjściowe w lokalizacji (2,2) w obrazie wyjściowym będzie 7.

Pamiętaj, że nie rozwiązałem problemu w którym miejscumaska ​​wyszedłaby poza granice. W szczególności, jeśli spróbuję znaleźć wyjście w rzędzie 1, na przykład w kolumnie 1, będzie pięć miejsc, w których maska ​​wyjdzie poza granice. Jest na to wiele sposobów. Niektórzy uważają te piksele na zewnątrz za zero. Inni ludzie lubią replika obramowanie obrazu, tak aby były to piksele granicyskopiowane poza wymiarami obrazu. Niektórzy lubią podkładać obraz za pomocą bardziej wyrafinowanych technik, takich jak wypełnianie symetryczne, gdzie piksele brzegowe są lustrzanym odbiciem tego, co znajduje się wewnątrz obrazu, lub dopełnieniem kołowym, w którym piksele brzegowe są kopiowane z drugiej strony obrazu.

To wykracza poza zakres tego posta, ale w twoimW takim przypadku zacznij od najprostszego przypadku, w którym piksele, które wykraczają poza obręb obrazu, podczas zbierania dzielnic, ustaw je na zero.


Co teraz k1 i k2 oznaczać? k1 i k2 oznaczać offsetowy w odniesieniu do centrum okolicy i maski. Zauważ, że n1 - k1 i n2 - k2 są ważne w sumie. Pozycja wyjściowa jest oznaczona przez n1 i n2. W związku z tym, n1 - k1 i n2 - k2offsetów w odniesieniu do tego centrum w sensie horyzontalnym n1 - k1 i zmysł pionowy n2 - k2. Gdybyśmy mieli 3 x 3 maska, środek byłby k1 = k2 = 0. W lewym górnym rogu będzie k1 = k2 = -1. W prawym dolnym rogu będzie k1 = k2 = 1. Powodem, dla którego idą w nieskończoność, jest to, że musimy się upewnić, że się ukrywamy wszystko elementy w masce. Maski mają skończoną wielkość, więc po to, aby zapewnić, że pokrywamy wszystkie elementy maski, dlatego powyższa suma upraszcza do tego punktowego podsumowania punktowego, o którym mówiłem wcześniej.


Oto lepsza ilustracja, w której maska ​​jest pionowym filtrem Sobela, który znajduje pionowe gradienty w obrazie:

Źródło: http://blog.saush.com/2011/04/20/edge-detection-with-the-sobel-operator-in-ruby/

Jak widać, dla każdego piksela wyjściowego wObraz docelowy, patrzymy na sąsiedztwo pikseli w tej samej lokalizacji przestrzennej w obrazie wejściowym, a to jest 3 x 3 w tym przypadku, wykonujemy ważony element przez sumę elementów między maską a otoczeniem i ustawiamy piksel wyjściowy to suma wszystkich ważonych elementów. Pamiętaj o tym przykładzie nie obróć maskę o 180 stopni, ale to właśnie robisz, jeśli chodzi o splot.


Mam nadzieję że to pomoże!


0 dla odpowiedzi nr 2

$ k_1 $ i $ k_2 $ są zmiennymi, które powinny obejmować cały obszar definicji twojego jądra. Sprawdź wikipedia w celu uzyskania dalszych informacji: http://en.wikipedia.org/wiki/Kernel_%28image_processing%29