Mam zestaw zdjęć przedstawiających średnią krzywiznę ludzkiej tylnej powierzchni.
Chcę „zeskanować” obraz w poszukiwaniu punktów, które mają podobne, odbite „odpowiedniki” w innej części obrazu (najprawdopodobniej symetryczne do linii środkowej, ale niekoniecznie, ponieważ mogą występować deformacje). Niektóre techniki łączenia obrazów wykorzystują to do „automatycznego wykrywania” podobnych punktów między obrazami, ale chcę je wykryć dla obu stron tego samego obrazu.
Ostatecznym celem jest znalezienie ciągłej, najprawdopodobniej zakrzywionej linii podłużnej, która adaptacyjnie dzieli plecy na symetryczne „połówki”.
Przykładowy obraz znajduje się poniżej. Zauważ, że nie wszystkie regiony są symetryczne (konkretnie tuż nad środkiem obrazu czerwony pionowy „pasek” odchyla się w prawo). Region ten powinien otrzymać złą ocenę, czy cokolwiek innego, ale wtedy lokalna symetria byłaby zdefiniowana z symetrycznych punktów umieszczonych dalej. W każdym razie będę musiał zaadaptować dowolny algorytm do mojej domeny aplikacji, ale moim celem jest strategia korelacji / splotu / dopasowania wzorców, myślę, że musi już być coś wokół.
(EDYCJA: poniżej jest więcej zdjęć i więcej wyjaśnień)
EDYCJA: zgodnie z prośbą, dołączę bardziej typowe obrazy, dobrze wychowane i problematyczne. Ale zamiast obrazów z kolorem, są to obrazy w skali szarości, więc kolor odnosi się bezpośrednio do wielkości danych, co nie zdarzyło się w przypadku kolorowego obrazu (tylko w celu komunikacji). Mimo że szare obrazy wydają się pozbawione kontrastu w porównaniu z kolorowymi, gradienty danych istnieją i można je w razie potrzeby uzupełnić kontrastem adaptacyjnym.
1) Obraz bardzo symetrycznego obiektu:
2) Zdjęcie tego samego obiektu w innym momencie. Chociaż jest więcej „funkcji” (więcej gradientów), nie „czuje się” tak symetrycznie jak wcześniej:
3) Cienki, młody podmiot z wypukłościami (wypukłe kości, oznaczone jaśniejszymi regionami) na linii środkowej zamiast częściej występującej wklęsłej linii środkowej:
4) Młody człowiek z odchyleniem kręgosłupa potwierdzonym przez zdjęcie rentgenowskie (zauważ asymetrie):
5) Typowy „przechylony” obiekt (choć w większości symetryczny wokół zakrzywionej linii środkowej i jako taki nie jest odpowiednio „zdeformowany”):
Każda pomoc jest mile widziana!
źródło
Odpowiedzi:
Jak powiedziałem w komentarzach, rejestracja obrazów medycznych jest tematem z wieloma dostępnymi badaniami i nie jestem ekspertem. Z tego, co przeczytałem, podstawową powszechnie stosowaną ideą jest zdefiniowanie odwzorowania między dwoma obrazami (w twoim przypadku obrazem i jego odbiciem lustrzanym), następnie zdefiniowanie terminów energii dla gładkości i podobieństwa obrazu, jeśli zastosowane zostanie odwzorowanie, i na koniec zoptymalizuj to mapowanie przy użyciu standardowych (lub czasem specyficznych dla aplikacji) technik optymalizacji.
Zhakowałem szybki algorytm w Mathematica, aby to zademonstrować. To nie jest algorytm, którego powinieneś używać w aplikacji medycznej, a jedynie demonstracja podstawowych pomysłów.
Najpierw ładuję twój obraz, odbij go i dzielę te obrazy na małe bloki:
Normalnie robilibyśmy przybliżoną sztywną rejestrację (używając np. Punktów kluczowych lub momentów obrazu), ale twój obraz jest prawie wyśrodkowany, więc pominę to.
Jeśli spojrzymy na jeden blok i jego odpowiednik odbicia lustrzanego:
Widzimy, że są podobne, ale przesunięte. Ilość i kierunek zmiany jest tym, co próbujemy ustalić.
Aby zmierzyć podobieństwo dopasowania, mogę użyć kwadratowej odległości euklidesowej:
niestety, użycie tych danych jest tym, że optymalizacja bezpośrednio była trudniejsza niż myślałem, więc zamiast tego zastosowałem przybliżenie drugiego rzędu:
Funkcja nie jest taka sama jak faktyczna funkcja korelacji, ale jest wystarczająco blisko, aby wykonać pierwszy krok. Obliczmy to dla każdej pary bloków:
To daje nam nasz pierwszy termin energetyczny do optymalizacji:
variablesX/Y
zawiera przesunięcia dla każdego bloku imatchEnergyFit
przybliża kwadratową różnicę euklidesową między obrazem oryginalnym a obrazem lustrzanym z zastosowanymi przesunięciami.Sama optymalizacja tej energii dałaby słabe wyniki (gdyby w ogóle się zbiegła). Chcemy również, aby przesunięcia były gładkie, a podobieństwo bloku nie mówi nic o przesunięciu (np. Wzdłuż linii prostej lub na białym tle).
Dlatego ustanowiliśmy drugi termin energetyczny dla gładkości:
Na szczęście w Mathematica jest wbudowana ograniczona optymalizacja:
Spójrzmy na wynik:
0.1
Czynnikiem zanimsmoothnessEnergy
to masa względna energia gładkość dostaje w stosunku do terminu obraz mecz energii. Oto wyniki dla różnych wag:Możliwe ulepszenia:
źródło
Interesujące pytanie. Po pierwsze, być może poszukujesz podejść opartych na detektorze kluczowych punktów i dopasowaniu. Obejmuje to SIFT (Scale-Invariant Feature Transform), SURF, ORB itp. Lub nawet prostsze podejście oparte wyłącznie na operatorze Harrisa (csce.uark.edu/~jgauch/library/Features/Harris.1988.pdf ). Z twojego postu nie jest jasne, czego próbowałeś, więc przepraszam, jeśli jestem tu naiwny.
Mówiąc to, pozwólcie, że zastosuję prostsze podejście z Morfologią Matematyczną (MM) dla zabawy :) Zdjęcia do wizualizacji wszystkich kroków są na końcu.
Wziąłem twój przykładowy obraz i przekonwertowałem go do przestrzeni kolorów L a b * za pomocą ImageMagick i użyłem tylko pasma L *:
0.png odpowiada pasmowi L *. Teraz jestem pewien, że masz rzeczywiste dane obrazu, ale mam do czynienia z artefaktami kompresji jpg, a co nie. Aby częściowo poradzić sobie z tym problemem, wykonałem otwarcie morfologiczne, a następnie zamknięcie morfologiczne płaską tarczą o promieniu 5. Jest to podstawowy sposób na zmniejszenie szumu przy MM, a biorąc pod uwagę promień dysku, niewielka część obrazu jest zmieniana. Następnie mój pomysł został oparty na tym pojedynczym obrazie, który ma duże szanse na niepowodzenie w innych przypadkach. Twój obszar zainteresowania jest wizualnie wyróżniony przez to, że jest ciemniejszy („gorętszy” na kolorowym obrazie), więc przypuszczałem, że statystyczny binarizator może działać dobrze. Użyłem podejścia Otsu, które jest automatyczne.
W tym momencie można wyraźnie wizualizować centralny obszar zainteresowania. Problem polega na tym, że w moim podejściu chciałem, aby był to zamknięty komponent, ale tak nie jest. Zaczynam od odrzucenia każdego podłączonego komponentu, który jest mniejszy niż największy (nie licząc tła jako jednego z nich). Ma to większą szansę na działanie w innych przypadkach, jeśli wynik binaryzacji był dobry. W twoim przykładowym obrazie jeden element jest podłączony do tła, więc nie jest odrzucany, ale nie powoduje problemów.
Jeśli nadal mnie śledzisz, nie udało nam się znaleźć faktycznego centralnego regionu zainteresowania. Oto moje zdanie na ten temat. Bez względu na to, jak osoba jest zakrzywiona (właściwie widzę pewne problematyczne przypadki), region przypomina pionową linię. W tym celu upraszczam bieżący obraz, wykonując otwarcie morfologiczne z pionową linią o długości 100. Ta długość jest czysto dowolna, jeśli nie masz problemów ze skalowaniem, nie jest to trudne do ustalenia. Teraz ponownie odrzucamy komponenty, ale na tym etapie byłem nieco bardziej ostrożny. Użyłem otwierania według obszaru z uzupełnieniem obrazu, aby odrzucić to, co uważałem za małe regiony, można to zrobić w bardziej kontrolowany sposób, wykonując coś w formie analizy granulometrii (również z MM).
Z grubsza mamy teraz trzy części: lewą część obrazu, środkową część i prawą część obrazu. Oczekuje się, że środkowa część będzie mniejszym składnikiem trójki, więc jest uzyskiwana w sposób trywialny.
Oto końcowy wynik, prawy dolny obraz jest tylko nałożonym obrazem po lewej stronie z oryginalnym. Poszczególne liczby nie są wyrównane, przepraszam za pośpiech.
źródło