Celem zadania jest wyznaczenie krawędzi kości w obrębie stawu biodrowego na obrazie RTG. Przykładowy obraz i wynik detekcji zamieszczono na Rys. 1.
Przykładowy kod wykorzystujący wektor kolejek przedstawiono na Listingu 2
Listing 2 Kod wykorzystujący wektor kolejek
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
typedef deque<int> listaInt;
int main(void)
{
vector<listaInt> w;
listaInt l;
vector<int> a;
// wektor liczb typu int
a.push_back(5);
cout << a.size() << endl;
// wektor list liczb typu int
w.push_back(l);
w[0].push_front(5);
cout << w.size() << " " << w[0].size() << endl;
}
Przedstawiony na Listingu 1 pseudokod nie zawiera instrukcji, które jednoznacznie definiują ścieżkę łączącą piksel startowy i końcowy. Proszę zaproponować metodę detekcji odtworzenia takiej ścieżki. Obróbkę obrazu należy przeprowadzić z wykorzystaniem biblioteki CImg.
Proszę zaproponować rozwiązanie problemu przedstawionego w Zadaniu 1, wykorzystujące kolejki priorytetowe.
Wejście:
Obraz krawędzi (kodowany 256 odcieniami szarości)
Obraz tymczasowy służący do zaznaczenia testowanych pikseli obrazu (0 - piksel nie testowany, 1 - piksel testowany), ustawiony na 0
Tymczasowa struktura danych S: wektor kolejek (każdy element wektora - kolejka - obsługuje jeden poziom szarości)
Obraz tymczasowy,który posłuży do odtworzenia krawędzi
Maksymalna intensywność M wszystkich przetestowanych pikseli (najwyższy poziom szarości, dla którego kolejka pikseli jest niezerowa) ustawiona na 0
Piksel startowy
Piksel końcowy
Start:
Oznacz piksel startowy jako przetestowany, umieść go w strukturze S i ustaw M na intensywność piksela startowego.
Pętla główna:
Pobierz piksel P odpowiadający aktualnej maksymalnej intensywności M ze struktury S, odpowiednio modyfikując ta strukturę
Przeanalizuj wszystkich nietestowanych sąsiadów P i dodaj ich do struktury S, odpowiednio modyfikując M, jeśli intensywność któregoś z sąsiadów jest większa niż aktualna wartość M
Wyjdź z pętli, jeżeli doszedłeś do piksela końcowego
(a) (b) (c)
Rys. 1 Obraz RTG kości stawu biodrowego (a) i wynik detekcji krawędzi kości nałożony na oryginalny obraz (b). Detekcję należy przeprowadzić korzystając z obrazu krawędzi (c).
Algorytm detekcji powinien korzystać z szablonów klas STL (do wyboru wektory, listy, kolejki dwukierunkowe). Zakładamy, że na wejściu dane są punkty startowe i końcowe każdej ze ścieżek. Pseudokod algorytmu jest przedstawiony na Listingu 1.
Listing 1 Pseudokod algorytmu do detekcji krawędzi kości