$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
W badaniu wykorzystano wyłącznie publicznie dostępne, zanonimizowane zestawy danych obrazowania CT i MRI. Nie było w tym żadnych żywych ludzi ani zwierząt. W związku z tym nie była wymagana żadna zgoda instytucjonalnej komisji rewizyjnej (IRB) ani komisji bioetycznej.
Przegląd metod
Protokół ten przedstawia powtarzalny potok do energooszczędnego odszumiania obrazów medycznych. Łączy w sobie techniki wstępnego przetwarzania, w tym filtry wyostrzające i grupowanie K-średnich, z automatycznym koderem opartym na konwolucyjnej sieci neuronowej (CNN) do odszumiania obrazów. Ta zintegrowana metoda poprawia jakość obrazu, jednocześnie skracając czas szkolenia i zmniejszając zużycie energii przez sprzęt, wspierając zrównoważoną diagnostykę medyczną 19,20,21,22,23. Rysunek 5 podsumowuje kompleksową strukturę.

Rysunek 5: Proponowana architektura struktury odszumiania. Na tym rysunku przedstawiono pełny potok: akwizycję danych, wstępne przetwarzanie (wyostrzanie + segmentacja K-średnich), a następnie odszumianie oparte na automatycznym koderze CNN. Kładzie nacisk na podejście hybrydowe, którego celem jest zmniejszenie zużycia energii przy jednoczesnym zachowaniu wierności strukturalnej. Kliknij tutaj, aby zobaczyć większą wersję tego rysunku.
Cały przepływ pracy podsumowano na rysunku 5, który pokazuje sekwencję od konfiguracji zestawu danych, przez wstępne przetwarzanie (wyostrzanie i K-średnie), po automatyczne odszumianie CNN i testowanie.
Konfiguracja oprogramowania i środowiska
Opcja A - Google Colab (zalecana ze względu na odtwarzalność): Przejdź do colab.research.google.com, kliknij pozycję Nowy notes. Wybierz pozycję Środowisko uruchomieniowe > Zmień typ środowiska uruchomieniowego > Akcelerator sprzętowy: GPU > Zapisz. Kliknij pozycję Plik > Prześlij , aby przekazać podany notes i zestaw danych .zip (lub połącz się z Dyskiem Google, klikając pozycję Pliki > zamontuj Dysk). W pierwszej komórce kodu zainstaluj zależności (już w notesie): install opencv-python scikit-image scikit-learn tensorflow matplotlib numpy pandas. Kliknij pozycję Środowisko uruchomieniowe > Uruchom wszystko. Upewnij się, że widzisz: (i) podsumowanie środowiska z wersjami pakietów, (ii) nazwę procesora GPU (w danych wyjściowych komórki) oraz (iii) uruchomienie folderu eksperymentu/RRRR-MM-DD/.
Opcja B - Lokalna (conda): Otwórz wiersz polecenia/terminal Anaconda i uruchom:

Umieść swój zestaw danych w obszarze data/raw/ i skrypty w obszarze kod/. Uruchom: python code/train_autoencoder.py --data_root data --img_size 256 --k_values 3 5 --epochs 100 --batch 32 --lr 0.001. Potwierdź, aby zobaczyć: wydruk środowiska, wykryty procesor graficzny i uruchomiony katalog dziennika/RRRR-MM-DD/.
Przygotowanie zestawu danych
Publicznie dostępne zestawy danych skanów CT i MRI pochodziły z repozytoriów obrazowania medycznego. Te zestawy danych zawierały szum typowy dla rzeczywistych skanów klinicznych i zostały pozbawione elementów pozwalających na identyfikację zgodnie ze standardami instytucjonalnymi i etycznymi 8,9. Każdy obraz został przeskalowany do 256 x 256 pikseli i zapisany w formacie PNG lub DICOM w celu zapewnienia zgodności. Zestawy danych zostały losowo podzielone w następujący sposób: 70% do trenowania, 15% do walidacji i 15% do testowania, zapewniając warstwowy rozkład modalności obrazowania i poziomów hałasu⁶. Statystyki szumów mierzono przy użyciu średniej wariancji pikseli przed odszumianiem.
Uporządkuj foldery: Utwórz folder zgodnie z poniższym opisem:

Aby dodać obrazy, skopiuj pozbawione elementów pozwalających na identyfikację obrazy CT/MRI do data/raw/CT i data/raw/MRI (PNG, JPG lub DICOM). Standaryzacja rozmiaru obrazu przy użyciu języka Python (zalecane): uruchom polecenie Zmień rozmiar i konwertuj komórkę notesu. Wczytuje każdy obraz, w razie potrzeby konwertuje skalę szarości i zmienia rozmiar do 256 x 256 .

Alternatywą jest użycie GUI (alternatywa ImageJ/Fiji) zgodnie z opisem. Kliknij Plik > Importuj > Sekwencję obrazów (lub pojedyncze obrazy), następnie Typ > obrazu > 8-bitowy, Obraz > Dostosuj rozmiar >... > 256 x 256, a następnie Zapisz > jako > PNG do data/preproc/.
Tworzenie podziałów: uruchom podział komórki notesu Train/Val/Test (70/15/15); Tasuje nazwy plików i kopiuje je do data/splits/train|val|test/. Konsola drukuje liczniki (np. Pociąg: 700, Wartość: 150, Test: 150). Punkt kontrolny (obserwacja): Otwórz dane/podziały/trenowanie/ i sprawdź, czy obrazy mają wymiary 256 x 256 i są w skali szarości (1 kanał). Zachowaj mały manifest CSV (splits.csv), który zawiera listę ścieżki pliku, modalności i etykiety podziału.
Wstępne przetwarzanie obrazu
Użyj jądra do ostrzenia 3 x 3. Wykonaj poprawianie obrazu za pomocą jądra wyostrzającego. Jądro konwolucyjne wyostrzające się zostało użyte w celu wzmocnienia granic anatomicznych przed segmentacją:

Filtr ten uwydatnia ważne struktury poprzez wzmocnienie składowych o wysokiej częstotliwości 4,5. Każdy obraz został zwojowany przy użyciu biblioteki OpenCV Pythona (cv2.filter2D()) w celu wygenerowania ulepszonego obrazu. Rysunek 6 ilustruje porównania przed i po.

Rysunek 6: Wykres dokładności walidacji dla różnych wartości k. Wykres słupkowy ilustrujący dokładność walidacji osiągniętą dla różnych wartości K stosowanych w kroku grupowania K-średnich (K=2, 3, 4, 5). Dokładność osiąga szczyt przy K=3, co wskazuje na optymalną separację między strukturami anatomicznymi a obszarami hałasu. Skala: Znormalizowane wartości dokładności (0-1). Kliknij tutaj, aby zobaczyć większą wersję tego rysunku.
Złóż wniosek (Python/OpenCV) za pomocą poniższego kodu.

Lub użyj alternatywy GUI (ImageJ/Fiji), klikając Process > Filters > Convolve. Wklej powyższą macierz 3 x 3 i kliknij OK > File > Save As > PNG into data/preproc/enhanced/. Obserwuj punkt kontrolny, ponieważ krawędzie i granice narządów wydają się wyraźniejsze; Jeśli widoczne są nadmiernie naostrzone halo, zmniejsz centralną wagę jądra z 5 do 4,5 i uruchom ponownie. Rysunek 7 przedstawia wyniki odszumiania przed i po. Obrazy przed wyraźnie wykazują szum i rozmycie, podczas gdy obrazy po wykazują zwiększoną klarowność, ostrzejsze granice anatomiczne i lepszy kontrast, co świadczy o skuteczności proponowanego potoku odszumiania.

Rysunek 7: Architektura sieci konwolucyjnej NAutoencoder. Ilustruje architekturę autoenkodera: warstwa wejściowa, koder (warstwy Conv + Pool), wąskie gardło, dekoder (Upsampling + Transposed Conv layers). Każda warstwa jest oznaczona rozmiarem i funkcją. Kliknij tutaj, aby zobaczyć większą wersję tego rysunku.
Grupowanie K-średnich na potrzeby segmentacji
Ulepszone obrazy zostały przekształcone za pomocą NumPy (image.reshape(-1, 1)) i zgrupowane za pomocą sklearn.cluster.KMeans(n_clusters=3 lub 5). Segmentowane dane wyjściowe zostały przekształcone z powrotem do 2D (np.reshape(clustered_array, image.shape)) w celu wizualizacji obszarów anatomicznych w porównaniu ze strefami szumu14. W tabeli 1 przedstawiono ustawienia segmentacji.
| Nr Sr | Wartość k | Dokładność |
| 1 | 3 | 0.761 |
| 2 | 5 | 0.869 |
| 3 | 7 | 0.75 |
Tabela 1: Wartości k z odpowiednimi dokładnościami walidacji. W tabeli przedstawiono dokładności walidacji uzyskane dla różnych wartości parametru grupowania k stosowanego na etapie segmentacji K-średnich rurociągu odszumiania. Wyniki pokazują, że k = 5 daje najwyższą dokładność, co pomaga w optymalnym doborze parametrów grupowania.
Segmentacja K-średnich: Przekształć i zgrupuj (Python/scikit-learn) przy użyciu poniższego kodu.

Wykonaj podgląd kolorów (opcjonalnie) i odwzoruj etykiety na kolory w celu wizualnej kontroli jakości i nałożenia krawędzi z wyostrzonego obrazu. Wybierz K, biegnąc z K=3 i K=5; dokładność walidacji obliczeń na dalszych etapach (w tabeli 1 wymieniono ustawienia; Rysunek 6 przedstawia dokładność w porównaniu z K). To jest punkt kontrolny; obserwować, czy piksele z dominacją szumu tworzą wyraźne klastry; Obszary anatomiczne powinny pozostać przyległe. Jeśli pojawią się małe plamki, zastosuj granice anatomiczne.
Odszumianie oparte na sieciach neuronowych
Opis architektury: Rysunek 8 przedstawia schemat kodera-wąskiego gardła-dekodera. Autoenkoder oparty na CNN został opracowany przy użyciu TensorFlow/Keras. Architektura obejmowała: warstwę wejściową: obraz w skali szarości 256 x 256, koder z trzema warstwami konwolucyjnymi (jądro: 3 x 3, krok: 1, aktywacja ReLU), po której następuje max-pooling; wąskie gardło jako gęsta reprezentacja utajona, dekoder z trzema warstwami upsampling z transponowanymi splotami, wyjście jako warstwa aktywowana sigmoidem tworząca odszumiony obraz. Tabela 2 zawiera pełne parametry architektoniczne warstwowe.

Rysunek 8: Wizualne wyniki procesu odszumiania. Prezentuje oryginalny zaszumiony obraz, wstępnie przetworzony obraz i końcowy odszumiony wynik obok siebie w celu oceny jakościowej. Demonstruje zachowanie krawędzi i redukcję artefaktów. Kliknij tutaj, aby zobaczyć większą wersję tego rysunku.
| Nr Sr | Atrybuty kompilacji | Wartości atrybutów kompilacji |
| 1 | Optymalizator | Adam |
| 2 | Strata | Kategoryczna entropia krzyżowa |
| 3 | Metryki | Dokładność |
Tabela 2: Kompilacja atrybutów sieci neuronowej. W tej tabeli szczegółowo opisano kluczowe parametry kompilacji używane do trenowania modelu autokodera konwolucyjnego. Ustawienia te zostały zaimplementowane w TensorFlow i obejmują optymalizator, funkcję straty, metrykę oceny, liczbę epok i wielkość partii.
Konfiguracja treningu: Parametry treningu obejmowały: funkcję straty jako błąd średniokwadratowy (MSE), optymalizator jako Adam (współczynnik uczenia się = 0,001), wielkość partii 32 i epoki jako 100 z wczesnym zatrzymaniem (cierpliwość = 10).
Krótki przegląd szkolenia jest następujący. Uruchom szkolenie, przechodząc do Colab i klikając Runtime > Run all; upewnij się, że procesor graficzny jest wymieniony (np. Tesla T4). Użyj kodu języka Python/train_autoencoder.py --data_root data --epochs 100 --batch 32 --lr 0.001 --early_stop 10. Monitorowanie za pomocą konsoli drukuje epokę, train_loss, val_loss i czas/epokę. Wczesne zatrzymanie wyzwala się po cierpliwości = 10 epok bez poprawy. Najlepszy model jest zapisywany w runs/.../checkpoints/best.h5. Jest to punkt kontrolny, który można obserwować za pomocą metody model.summary(), która pokazuje stos warstw; liczba parametrów powinna być zgodna z tabelą 2. Jeśli wystąpią błędy OOM, zmniejsz partię do 16 lub ustaw rozmiar danych wejściowych na 224 x 224.
Pośrednie punkty kontrolne i rozwiązywanie problemów
Po wyostrzeniu i segmentacji wyświetl podgląd trzech obrazów na podział i upewnij się, że (i) krawędzie są poprawione, (ii) maski klastrów są wyrównane z anatomią. Podczas trenowania upewnij się, że straty walidacji zmniejszają się i nie rozchodzą się. Jeśli odszumione wyjście wydaje się nadmiernie wygładzone, zmniejsz środek jądra (4.5) lub zwiększ epoki treningu o 10 przy niższym tempie uczenia się (np. 5e-4).
Ocena wydajności: Wykorzystano następujące wskaźniki ilościowe: szczytowy stosunek sygnału do szumu (PSNR), miara wskaźnika podobieństwa strukturalnego (SSIM) oraz dokładność walidacji klasyfikacji odszumionych obrazów.
Proponowana metoda poprawiła PSNR z 21,52 do 28,14 dB, a SSIM z 0,76 do 0,86 w porównaniu z modelami bazowymi przedstawionymi w 7,16. Efektywność energetyczną rejestrowano poprzez monitorowanie użycia procesora graficznego (logi NVIDIA-SMI) i czasu trenowania. Tabela 3 podsumowuje wyniki odszumiania.
| Nr Sr | Metryka | Model bazowy |
| 1 | Średni czas epoki (s) | 25.8 |
| 2 | Całkowita energia treningowa (kWh) | 0.52 |
| 3 | Wykorzystanie procesora GPU (%) | 85% |
| 4 | Czas wnioskowania na obraz (ms) | 18.7 |
| 5 | Dokładność walidacji (%) | 76.19% |
| 6 | PSNR (dB) | 21.52 |
| 7 | Karta SSIM | 0.7619 |
Tabela 3: Wskaźniki oceny działania w odniesieniu do poziomu bazowego w porównaniu z proponowaną metodą. W tej tabeli porównano proponowany potok odszumiania z modelem bazowym pod kątem kilku wskaźników wydajności, w tym czasu trenowania, wykorzystania procesora GPU i miar jakości (PSNR, SSIM i dokładność walidacji). Wyniki wskazują na poprawę efektywności energetycznej i jakości obrazu dzięki proponowanej metodzie.
Obliczenia PSNR/SSIM i zużycie energii. W przypadku PSNR/SSIM (scikit-image) użyj poniższego kodu.

W przypadku użycia energii obliczeniowej/procesora GPU uruchom komórkę, która rejestruje nvidia-smi --query-gpu=power.draw,utilization.gpu --format=csv -l 1 to runs/.../gpu_log.csv podczas trenowania (dostarczone w notesie). W drugim terminalu uruchom następujący kod:

Przeanalizuj plik CSV, aby obliczyć średnią moc (W) i zintegrować w czasie trenowania w celu uzyskania szacowanej energii (Wh = kWh). Notebook agreguje PSNR, SSIM, dokładność walidacji, czas epoki i energię w results_table3.csv w celu bezpośredniego włączenia.
Ocena zrównoważonego rozwoju i symulacja telemedycyny
Aby ocenić trwałość sprzętu urządzenia, zastosowaliśmy szum Gaussa i Poissona do symulacji degradacji obrazu spowodowanej starzeniem się urządzeń. Model przywrócił te zdegradowane dane wejściowe do jakości zbliżonej do diagnostycznej, potwierdzając jego niezawodność 27,28,29. W symulacjach telemedycznych odszumione obrazy były przesyłane za pomocą symulowanej przepustowości 256 Kb/s przy użyciu gniazd Python. Zachowano przejrzystość wizualną, co umożliwia zdalną diagnostykę 30,31,32.
W przypadku symulacji starzenia się urządzenia zastosuj szum Gaussa (σ=10-30) i szum Poissona do czystych obrazów (symulacja starzenia się komórek) i zapisz do danych/symulowanych/wiekowanych/. Uruchamianie wytrenowanego modelu na przestarzałych/ danych wejściowych; Zapisz wyniki w wynikach/aged_denoised/. Zwróć uwagę, że jakość wizualna powinna osiągnąć wierność zbliżoną do diagnostycznej; porównaj PSNR/SSIM z punktem odniesienia.
W celu przeprowadzenia testu przepustowości telemedycyny skompresuj odszumione obrazy do formatu PNG/JPEG w 85%-95% i wyślij symulowane łącze o przepustowości 256 kb/s za pomocą dostarczonego testu gniazda Python (telemed_sim.py). Pomiar czasu podróży w obie strony i skrótu integralności plików; Sprawdź, czy nie zostały wprowadzone żadne artefakty diagnostyczne. Zwróć uwagę, że przejrzystość wizualna jest zachowana, a rozmiary plików odpowiednie dla przepływów pracy o niskiej przepustowości.
Punkt końcowy protokołu
Po zakończeniu powinieneś mieć: (i) wyostrzone obrazy w preproc/enhanced/, (ii) segmentowane obrazy w preproc/segmented/, (iii) wyszkolony autoenkoder z best.h5 w runs/.../checkpoints/, (iv) odszumione dane wyjściowe dla obrazów testowych i postarzanych w wynikach/, (v) skompilowany plik metryk (results_table3.csv) podsumowujący PSNR, SSIM, dokładność walidacji, czas epoki i szacowaną energię.