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

Podobne dokumenty