Użyłem do tego rodzaju analizy w mikroskopie i ostatecznie umieścić wszystko, co potrzebne do w przetwarzaniu obrazu i pakiet analityczny napisany w C, prowadzony przez Tcl. (Udało się tylko z obrazami 512 x 512, co tłumaczy, dlaczego 512 tak często się upowszechniało, były obrazy z pikselami o różnych rozmiarach, ale większość prac została wykonana przy użyciu 8-bitowych pikseli, co tłumaczy, dlaczego 0xff i maksymalna znacząca liczba 254 na obrazie.)
Krótko mówiąc, "zz" na początku poleceń Tcl wysyła resztę linii do parsera pakietu, który wywołuje odpowiednią procedurę C z podanymi argumentami. Zaraz po 'zz' jest argumentem wskazującym wejście i wyjście polecenia. (Może istnieć wiele wejść, ale tylko jedno wyjście.) "R" oznacza obraz 512 x 512 x 8-bitowy. Trzecie słowo to nazwa polecenia, które ma zostać wywołane; "wykresy" oznaczają obraz w sposób opisany w poniższym tekście. Tak więc "wykresy zz rr" oznaczają "Wywołaj parser ZZ; wprowadź obraz r do polecenia wykresów i odtwórz obraz r. " Reszta wiersza polecenia Tcl określa, który z wstępnie przydzielonych obrazów ma zostać użyty. (Obraz "g" jest obrazem obszaru zainteresowania, czyli obrazem obszaru zainteresowania, prawie wszystkie operacje ZZ wykonywane są pod kontrolą ROI.) Tak więc, "r1 r1 g8" oznacza "Użyj r1 jako wejścia, użyj r1 jako wyjścia (to znaczy, zaznacz sam obraz wejściowy) i wykonaj operację, gdy odpowiadający jej piksel na obrazie g8 --- to znaczy r8, użyty jako ROI --- wynosi> 0.
Nie sądzę, że jest dostępna w Internecie w dowolnym miejscu, ale jeśli chcesz wybrać kod źródłowy lub skompilować cały program, z chęcią Ci go prześlę. Oto fragment instrukcji (ale wydaje mi się, że w tym podręczniku pojawiają się błędy w tej późnej wersji - to jest zawstydzające ...):
Przykład 6. Funkcje zliczania.
Problem
Liczenie jest wspólnym zadaniem. Elementy zliczone nazywane są "funkcjami" i zazwyczaj konieczne jest staranne przygotowanie obrazów, aby cechy odpowiadały w jeden do jednego sposób rzeczom, które są rzeczywistymi przedmiotami, które należy policzyć. Tutaj jednak ignorujemy przygotowanie obrazu i rozważamy mechanikę liczenia.Pierwszym zadaniem zliczania jest sprawdzenie, ile funkcji znajduje się na obrazach w katalogu ./cells?
Podejście
Najpierw określmy "cechę". Funkcja to największa grupa "set" (niezerowych) pikseli, z których wszystkie można osiągnąć podróżując od jednego zestawu pikseli do drugiego wzdłuż tras północ-południe-wschód-zachód (góra-dół-prawo-lewo), rozpoczynając z określonego ustawionego piksela. Polecenie zz, które wykrywa i zaznacza takie funkcje na obrazie, to "zz rr grafy R: src R: dest G: ROI", tak zwane, ponieważ terminem matematycznym dla takiej cechy jest "wykres". Jeśli wszystkie piksele na obrazie są ustawione, oznacza to tylko jeden wykres na obrazie, ale zawiera on 262144 piksele (512 * 512). Jeśli piksele są ustawione i wyzerowane (równe zeru) we wzorcu szachownicy, , wówczas będzie 131072 (512 * 512/2) wykresów, ale każdy będzie zawierał tylko jeden piksel. Pokrótce wyjaśniono, że "wykresy zz rr" rozpoczyna się w lewym górnym rogu obrazu i skanuje każdy kolejny wiersz od lewej do prawej, aż znajdzie ustalony piksel, a następnie znajdzie wszystkie przypisane do niego piksele przez północ, południe, wschód lub granice zachodnie ("4-połączone"). Następnie ustawia wszystkie piksele na tym wykresie na 1 (0x01). Po znalezieniu i zaznaczeniu wykresu 1, rozpoczyna on ponownie skanowanie w piksel po tym, w którym pierwszy raz odkrył wykres 1, tym razem ignorując wszelkie piksele, które już należą do wykresu. Pierwsze 254 wykresy, które znajdzie, będą zaznaczone jednoznacznie; wszystkie znalezione wykresy będą jednak oznaczone wartością 255 (0xff) i dlatego nie można ich odróżnić. Kluczem do dokładnego zliczenia dowolnej liczby wykresów jest przetwarzanie każdego obrazu etapami, czyli znajdowanie liczby wykresów na obrazie, a jeśli liczba jest większa niż 254, usuwanie 254 wykresów właśnie znalezionych, powtarzanie przetwarzaj do 254 lub mniej wykresów. Język Tcl zapewnia środki do sterowania tą operacją.
Zacznijmy budować potrzebne polecenia, odczytując plik obrazu ZZ na obraz R i wykrywając i zaznaczając wykresy. Przed pętlą przetwarzania deklarujemy i zerujemy zmienną, aby pomieścić całkowitą liczbę funkcji w serii obrazów. W pętli przetwarzania zaczynamy od odczytania pliku obrazu na obraz R oraz wykrycia i zaznaczenia wykresów.
zz ur to $inDir/$img r1
zz rr graphs r1 r1 g8
Następnie mamy zera niektóre zmienne śledzić hrabiów, a następnie użyć polecenia „ra max”, aby dowiedzieć się, czy wykryto więcej niż 254 wykresy.
set nGraphs [ zz ra max r1 a1 g1 ]
Jeśli nGraphs ma równy 255, a następnie 254 dokładnie liczone wykresy należy dodać do całości, wykresy od 1 do 254 powinny być usuwane, a liczba powtarzany tak wiele razy, ile potrzeba, aby zmniejszyć liczba wykresach poniżej 255.
while {$nGraphs == 255} {
incr sumGraphs 254
zz rbr lt r1 155 r1 g1 0 255
set sumGraphs 0
zz rr graphs r1 r1 g8
set nGraphs [ zz ra max r1 a1 g8 ]
}
Kiedy „a” wyjść pętlowych, zmienna nGraphs musi posiadać szereg mniej niż 255, to jest dokładnie liczbę zliczonych wykresów; jest to dodawane do rosnącej liczby funkcji w serii obrazów.
incr sumGraphs $nGraphs
Po pętli przetwarzania wydrukuj całkowitą liczbę funkcji znalezionych w serii.
puts “Total number of features in $inDir \
images $beginImg through $endImg is $sumGraphs.”
Po zakończeniu pętli przetwarzania wydrukuj całkowitą liczbę funkcji znalezionych w serii.
Proste rozpoznawanie obiektów brzmi dla mnie jak sprzeczność. – Joren
Co sugerowałbyś na przemian? –
Proszę nie mówić "rozwiązany" w swoim pytaniu. Albo zaakceptuj najlepszą odpowiedź, albo odpowiedz na własne pytanie i zaakceptuj to. – Soviut