Wykład
Transkrypt
Wykład
Cyfrowe przetwarzanie sygnałów Wykład Transformacja Radona i Hougha dr inż. Robert Kazała 1 Transformacja Radona ● ● ● ● ● W roku 1905 W. Radon udowodnił następujące twierdzenie: „Obraz obiektu dwuwymiarowego można zrekonstruować na podstawie nieskończone ilości rzutów jednowymiarowych”. Rzutowanie to odpowiada wykonywaniu na obiekcie pewnej transformacji, nazywanej Transformacją Radona. Dokonanie na wynikach rzutowania Odwrotnej Transformacji Radona umożliwia zrekonstruowanie obrazu obiektu. W twierdzeniu pojawia się termin rekonstrukcja. Otóż, w przeciwieństwie do klasycznej radiografii, w której zdjęcie obiektu powstaje natychmiast na filmie, potem zaś obraz jest tylko wywoływany i utrwalany, w przypadku tomografii, nie można na podstawie serii pomiarów od razu uzyskać obrazu. Niezbędny jest dodatkowy etap – wyznaczenie na podstawie zebranych danych obrazu badanego obiektu. Proces ten nazywamy rekonstrukcją. 2 Transformata Radona w kartezjańskim układzie współrzędnych ● Transformata Radona to transformata całkowa o następującej postaci: 3 Transformata Radona punktu znajdującego się w środku układu współrzędnych ● Transformata Radona przekształca punkt leżący w początku układu współrzędnych, na prostą w przestrzeni parametrów Radona biegnącą równolegle do osi pionowej i przechodzącej przez punkt 0. 4 Transfromata Radona punktu o dowolnych współrzędnych (x0,y0) ● Transformata Radona przekształca punkt o dowolnych współrzędnych w prostą w przestrzeni parametrów Radona. 5 Transformata Radona prostej ● ● ● Transformata Radona lini w kartezjańskim układzie współrzędnych prowadzi do punktu w układzie współrzędnych Transformaty Radona. Punkt ten ma współrzędne odpowiadające parametrom prostej. W ten sposób można wykorzystać Transformatę Radona do wynajdywanie w obiekcie, czy obrazach linii prostych. 6 Normalna postać Transformaty Radona ● ● ● ● ● ● ● ● ● Obiekty spotykane w rzeczywistości cechuje zwykle pewna symetria, w związku z czym dogodniej jest je opisywać w innych niż kartezjańskim układzie współrzędnych. Np. człowiek w przybliżeniu posiada symetrię walcową. Ponadto Twierdzenie Radona mówi o tym, iż do wiernego zrekonstruowania obiektu potrzebna jest nieskończona liczba rzutów tego obiektu. Warunek ten w praktyce jest oczywiście niemożliwy do zrealizowania, w związku z czym zawsze będziemy mieli do czynienia z obrazem będącym pewnym przybliżeniem rzeczywistego obiektu. Niemniej powstaje pytanie, z jakich kierunków dokonać rzutowania badanego obiektu. Okazuje się, że dowolne ruchy występujące w przyrodzie, można uzyskać za pomocą obrotu i przesunięcia. Uwzględniając symetrię ciała człowieka, wspomniane ruchy wygodniej jest opisywać w biegunowym układzie współrzędnych. Przejdziemy teraz zatem do wyrażenia Transformaty Radona w biegunowym układzie współrzędnych, którą będziemy nazywać Normalną Transformatą Radona. Pomocne przy tym będą dwa dodatkowe zagadnienia — parametryzacja prostej w układzie biegunowym oraz obrót układu współrzędnych. 7 Parametryzacja prostej w układzie biegunowym ● ● Na początku dokonajmy parametryzacji prostej — zamiast opisywać prostą za pomocą współczynnika a (nachylenia prostej względem układu OX) oraz współczynnika b — przecięcia prostej z osią OY wprowadzimy parametry tp, określający odległość prostej od początku układu współrzędnych oraz kąt φ jaki tworzy normalna do prostej względem osi OX. Znaczenie parametrów tp i φ zilustrowano na rysunku. 8 Parametryzacja prostej w układzie biegunowym ● Przy pomocy parametrów tp i φ równanie prostej może być zapisane w następujący sposób: 9 Obrót układu współrzędnych ● Transformacja współrzędnych punktu x0,y0 w układzie X-Y do układu T-S, obróconego względem niego o kąt φ. W układzie T-S punkt ma współrzędne t0,s0: 10 Obrót układu współrzędnych ● Transformacja współrzędnych punktu x0,y0 w układzie X-Y do układu T-S, obróconego względem niego o kąt φ. W układzie T-S punkt ma współrzędne t0,s0: 11 Normalna Transformata Radona ● Parametryzacja prostej za pomocą przesunięcia tp oraz kąta φ umożliwia następujący zapis Transformaty Radona: 12 Przekształcenie punktu ● Wynikiem przekształcenia punktu opisanego w biegunowym układzie współrzędnych za pomocą Transformaty Radona jest krzywa sinusoidalna. 13 Sinogram ● ● ● Dowolny obiekt możemy zapisać jako sumę punktów o różnych współrzędnych. W związku z tym, że Transformatą Radona punktu w biegunowym układzie współrzędnych jest krzywa sinusoidalna, Transformata Radona dowolnego obiektu będzie składała się z bardzo wielu sinusoid. Jest to powód, dla którego wykres Transformaty Radona nazywamy sinogramem. 14 Przykład obiektu i jego sinogramu 15 Odwrotna Transformata Radona ● ● ● ● ● ● Transformata Radona jest pewnym rodzajem jednowymiarowego rzutowania. Obiekt badamy wzdłuż pewnej prostej, sparametryzowanej np. w biegunowym układzie współrzędnych. Wynikiem pojedynczego pomiary wzdłuż określonego przez prostą kierunku,jest suma punktów tworzących obiekt i leżących na tej prostej. Punkty te reprezentują pewną wybraną cechę obiektu. Okazuje się, że istnieje transformata odwrotna do Transformaty Radona, która na podstawie serii opisanych pomiarów umożliwia odtworzenie obrazu obiektu. Jeśli transformata obiektu g(x,y) ma postać: 16 Odwrotna Transformata Radona ● Jeśli transformata obiektu g(x,y) ma postać: ● to jej transformata odwrotna wynosi ● Podana postać odwrotnej Transformaty Radona jest niewygodna do implementacji numerycznej (wymaga czasochłonnego liczenia wielu pochodnych), niemniej jest dowodem na to, iż możliwa jest na podstawie jednowymiarowych rzutów rekonstrukcja obrazu dwu lub trój wymiarowego obiektu. 17 Transformata Radona - przykład Radon transform Shepp Logan phantom Inverse Radon transform 18 Transformata Radona - przykład import matplotlib.pyplot as plt from skimage.io import imread from skimage import data_dir from skimage.transform import radon, iradon, rescale image = imread(data_dir + "/phantom.png", as_grey=True) image = rescale(image, scale=0.4) plt.figure(figsize=(8, 8.5)) plt.subplot(221) plt.title("Original"); plt.imshow(image, cmap=plt.cm.Greys_r) plt.subplot(222) projections = radon(image, theta=[0, 45, 90]) plt.plot(projections); plt.title("Projections at\n0, 45 and 90 degrees") plt.xlabel("Projection axis"); plt.ylabel("Intensity"); projections = radon(image) plt.subplot(223) plt.title("Radon transform\n(Sinogram)"); plt.xlabel("Projection axis"); plt.ylabel("Intensity"); plt.imshow(projections) reconstruction = iradon(projections) plt.subplot(224) plt.title("Reconstruction\nfrom sinogram") plt.imshow(reconstruction, cmap=plt.cm.Greys_r) plt.subplots_adjust(hspace=0.4, wspace=0.5) plt.show() 19 Transformacja Hougha ● wprowadzona przez Paula Hougha w 1962r jako metoda ● wykrywanie wzorców na obrazach binarnych ● została stworzona podczas prac nad obserwacją śladów cząsteczek elementarnych w komorze pęcherzykowej ● ● była to jedna z pierwszych prób zautomatyzowania procesu analizy śladów. Dotychczas analiza wymagała setek godzin pracy 20 Transformacja Hougha ● metoda początkowo nie rokowała większych nadziei ● dopiero z czasem zdobyła popularność ● w roku 1981 okazało się, że jest ona szczególnym przypadkiem transformacji Radona ● początkowo stosowana do wykrywania prostych ● w roku 1972 Duda i Hart zastosowali ją do detekcji krzywych analitycznych ● transformata Hougha znalazła szerokie zastosowanie w systemach wizji komputerowej ● w wyniku badań powstało wiele odmian transformaty 21 Transformacja Hougha - zastosowania ● analiza danych astronomicznych ● spektroskopia ● analiza map topograficznych ● sejsmologia ● biometria (identyfikacja osób) ● biomedycyna ● analiza obrazów satelitarnych ● śledzenie ruchomych celów 22 Transformacja Hougha - własności ● prostej w przestrzeni kartezjańskiej odpowiada punkt (ρ,α) w przestrzeni Hougha 23 Transformacja Hougha - własności ● ● ● punktowi w przestrzeni kartezjańskiej odpowiada sinusoidalana krzywa w przestrzeni Hougha przez punkt przechodzi nieskończenie wiele prostych (pęk) dla ustalonego punktu x i y w równaniu: x cos(α) + y sin(α) = ρ są stałe [x=x0, y=y0] ● rysujemy funkcję ρ = f(α) dla α z [0,Π] 24 Transformacja Hougha - własności 25 Transformacja Hougha - własności ● ● punkty leżące na tej samej prostej korespondują z sinusoidami przechodzącymi przez wspólny punkt w przestrzeni Hougha Przykład: – prosta y=2x+1; P0 -> (x0,y0) = (0,1); – P1 -> (x1,y1) = (2,3) 26 Transformacja Hougha - własności ● ● ● ● transformacja przeprowadzana jest na obrazach binarnych przez każdy punkt obrazu (różny od 0) prowadzony jest pęk prostych każda z tych prostych transformowana jest do przestrzeni Hougha -> punkt (ρ,α) punkt -> sinusoidalna krzywa 27 Transformacja Hougha - własności ● przestrzeń Hougha jest przestrzenią akumulacyjną ● można wyobrazić sobie ją jako tablicę dwuwymiarową ● występuje problem kwantyzacji ● – dla kąta α (z ilu prostych ma się składać pęk) – dla promienia wodzącego ρ dobór kwantyzacji jest kompromisem pomiędzy rozmiarem tablicy i czasem obliczeń oraz dokładnością 28 Transformacja Hougha - przykład ● ● Dla każdego punktu rysowane są linie przechodzące przez ten punkt pod różnymi kątami – na rysunku linie ciągłe Dla każdej linii rysowana jest linii prostopadła przechodząca przez środek ukladu współrzędnych – na rysunku linie przerywane. 29 Transformacja Hougha - przykład ● ● Długość linii prostopadłych i ich kąt jest mierzony – dane w tabelach. Operacja powtarzana jest dla każdego punktu. 30 Transformacja Hougha - przykład ● Wykres przedstawiający długości linii dla każdego kąta nazywany jest wykresem przestrzeni Hougha. 31 Transformacja Hougha - podsumowanie ● ● ● Zalety: – każdy punkt obrazu traktowany jest niezależnie → możliwość zrównoleglenia obliczeń – możliwość rozpoznawania obiektów częściowo zniekształconych (np. prosta z przerwami) metoda mało wrażliwa na zakłócenia w obrazie, sprawdza się przy segmentacji obrazów słabej jakości Wady: – zapotrzebowanie na dużą pamięć dla akumulatora – znaczna złożoność obliczeniowa 32 Transformacja Hougha dla okręgu - własności ● ● transformację Hougha można wykorzystać do znajdowania okręgów na obrazie wykorzystać można dwie metody: – analogiczną do transformaty dla linii z 3 wymiarowym akumulatorem – transformację Hougha dla linii i odpowiednią analizę akumulatora 33 Transformacja Hougha dla okręgu - własności ● równanie okręgu : ● Idea: ● ● punkt na obrazie stanowi fragment okręgu, zatem znane są parametry x i y zakładamy, że środek okręgu możne znajdować się gdziekolwiek na obrazie ● dla każdego potencjalnego środka wyliczamy promień r ● trójkę xc,yc,r akumulujemy H(xc,yc,r ) = H(xc,yc,r ) +1 34 Transformacja Hougha dla okręgu - własności ● w przestrzeni H szukamy maksimum → otrzymujemy współrzędne oraz promień szukanego okręgu ● przykład: ● metoda „kosztowna” obliczeniowo i pamięciowo 35 Transformacja Hougha dla okręgu - własności ● ● środek okręgu jest w punkcie (0,0) układu współrzędnych po transformacji Hougha przestrzeń akumulacyjna przyjmuje charakterystyczną postać 36 Transformacja Hougha dla okręgu - własności ● ● widoczny brzeg wstęgi tworzą krzywe w przestrzeni Hougha odpowiadające stycznym do okręgu w przestrzeni kartezjańskiej na podstawie analizy przestrzeni Hougha można odtworzyć parametr okręgu – promień 37 Transformacja Hougha dla okręgu - własności ● przed analizą trzeba wyodrębnić brzeg „wstęgi” – poprzez binaryzację Binaryzacja ● odtwarzanie promienia: 38 Transformacja Hougha dla okręgu - własności ● Przykład: 39 Transformacja Hougha dla okręgu - własności ● ● dany jest okrąg o promieniu r=50 i współrzędnych środka (70,60) przestrzeń Hougha przyjmuje następującą postać Hough 40 Transformacja Hougha dla okręgu - własności ● wyodrębnienie brzegu „wstęgi” poprzez binaryzację Binaryzacja 41 Transformacja Hougha dla okręgu - własności ● Analiza przestrzeni Hougha – wyznaczanie promienia – analogicznie jak dla okręgu położonego centralnie 42 Transformacja Hougha dla okręgu - własności ● Analiza przestrzeni Hougha – wyznaczanie środka okręgu – ekstremum (minimum lub maksimum) w zbinaryzowanej przestrzeni Hougha) 43 Transformacja Hougha dla okręgu - własności ● Analiza przestrzeni Hougha – wyznaczone ekstremum odpowiada zaznaczonej stycznej do okręgu – d = abs(rho) – r; – xS = cos(theta)*d; – yS = sin(theta)*d; – (xS,yS) = (71,60); 44 Transformacja Hougha dla okręgu - własności ● Przykład 45 Transformacja Hougha - zastosowania ● ● Transformacja Hougha wykorzystywana jest głównie do detekcji linii prostych (okręgów) na obrazach. Przeprowadzamy ją dla obrazów binarnych, które możemy otrzymać realizując następujące etapy przetwarzania obrazu: – binaryzacja – wstępna analiza - często stosuje się np. operacje morfologiczne, które pozwalają na usunięcie zakłóceń – detekcja krawędzi 46 Transformacja Hougha - zastosowania 47 Transformacja Hougha - zastosowania 48 Przykłady Python scikit-image 49 Przykłady Python scikit-image from skimage.transform import (hough_line, hough_line_peaks, probabilistic_hough_line) from skimage.filter import canny from skimage import data import numpy as np import matplotlib.pyplot as plt # Construct test image image = np.zeros((100, 100)) idx = np.arange(25, 75) image[idx[::-1], idx] = 255 image[idx, idx] = 255 # Classic straight-line Hough transform h, theta, d = hough_line(image) plt.figure(figsize=(8, 4)) plt.subplot(131) plt.imshow(image, cmap=plt.cm.gray) plt.title('Input image') 50 Przykłady Python scikit-image plt.subplot(132) plt.imshow(np.log(1 + h), extent=[np.rad2deg(theta[-1]), np.rad2deg(theta[0]), d[-1], d[0]], cmap=plt.cm.gray, aspect=1/1.5) plt.title('Hough transform') plt.xlabel('Angles (degrees)') plt.ylabel('Distance (pixels)') plt.subplot(133) plt.imshow(image, cmap=plt.cm.gray) rows, cols = image.shape for _, angle, dist in zip(*hough_line_peaks(h, theta, d)): y0 = (dist - 0 * np.cos(angle)) / np.sin(angle) y1 = (dist - cols * np.cos(angle)) / np.sin(angle) plt.plot((0, cols), (y0, y1), '-r') plt.axis((0, cols, rows, 0)) plt.title('Detected lines') 51 Przykłady Python scikit-image # Line finding, using the Probabilistic Hough Transform image = data.camera() edges = canny(image, 2, 1, 25) lines = probabilistic_hough_line(edges, threshold=10, line_length=5, line_gap=3) plt.figure(figsize=(8, 3)) plt.subplot(131) plt.imshow(image, cmap=plt.cm.gray) plt.title('Input image') plt.subplot(132) plt.imshow(edges, cmap=plt.cm.gray) plt.title('Canny edges') plt.subplot(133) plt.imshow(edges * 0) for line in lines: p0, p1 = line plt.plot((p0[0], p1[0]), (p0[1], p1[1])) plt.title('Probabilistic Hough') plt.axis('image') plt.show() 52