프로젝트 개요
|프로젝트명

CT DLA Comparator

|개발 기간

2023.03.30 - 2023.04.18

|팀 규모

김영주 [1인]

|프로젝트 요약

본 연구는 DLA를 통해 품질을 개선시킨 저선량 CT의 품질이 고선량 CT와 비교했을 때 비열등함을 보이기 위해 진행되었습니다. 해당 프로그램은 위의 연구 결과를 평가하기 위한 도구로써 개발되었습니다.

연구 과정은 우선, 저선량의 CT를 이용해 Catphan(CT의 품질을 평가할 때 쓰이는 Phantom)을 찍은 후, DLA 과정을 거쳐 영상의 품질을 개선합니다. 이렇게 품질이 개선된 영상과 고선량 CT로 찍은 영상을 비교합니다. 비교 방법은 우선, 한 변의 길이가 9mm인 정사각형 2D 이미지 내에 Catphan을 무작위 배치합니다. 영상의학과 선생님들께서 300개의 case를 확인하며 Catphan이 보이는 정도를 1-5점으로 평가합니다. 정답률을 계산 한 뒤, 고선량 CT의 정답률과 비교합니다.

전체 서비스 흐름
|로그인

이름과 전공을 입력합니다. 이것은 추후 CSV 파일명으로 쓰입니다.

|튜토리얼

10개의 case를 미리 경험하며, 프로그램 작동법을 익히고 Catphan을 정확히 찾았는지 정답을 확인할 수 있습니다. 부족할 경우 튜토리얼을 원하는 만큼 반복 실행할 수 있습니다.

|본 평가

영상의학과 선생님들께서 300개의 케이스를 평가합니다. 점수 평가 버튼은 1[Definitely Absent] ~ 5[Definitely Present]로 구성되어 있으며, 의사 선생님들의 바쁜 업무 환경을 고려하여, 잠시 자리를 비운 사이 의도치 않게 점수 버튼이 잘못 눌리는 경우를 방지하기 위해, Enter 키를 눌러 점수 버튼이 활성화/비활성화되도록 설계했습니다.

|파일 생성

각 케이스에서 평가자가 누른 점수와 정답, 이미지를 CSV 파일로 저장합니다. 이는 추후 정답률 계산에 사용됩니다.

핵심 기능
|TKinter, PyInstaller를 사용한 실행 파일 생성

TKinter를 활용해서 사용자 인터페이스(UI)를 구성하고, PyInstaller로 실행 파일을 만들어 배포했습니다. 이를 통해 사용자는 사용 중인 운영체제(맥, 윈도우)에 관계 없이 어떤 환경에서든 실행할 수 있고, 파이썬 프로그램 설치 없이도 프로그램을 실행할 수 있습니다.

|사용자의 입력을 CSV 파일로 저장

사용자가 입력한 값을 구조화된 형태로 파일에 저장하는 기능을 구현했습니다. 이를 통해 입력 데이터를 파일 단위로 관리할 수 있으며, Pandas나 Excel과 같은 외부 툴을 통해 손쉽게 후속 분석이나 보고에 활용할 수 있도록 했습니다.

개발 과정에서 발생한 문제 및 해결 방안
|정사각형 이미지 내 Catphan 무작위 배치 시, 경계 잘림 및 외곽선 노출 문제

품질 개선 후, 영상 속 Catphan을 일정 크기의 정사각형 캔버스 내부에 무작위로 배치하는 과정에서, 배치된 Catphan이 캔버스를 벗어나 잘리거나, 경계가 뚜렷하게 노출되는 문제가 발생하였습니다. 연구 중인 사이즈가 아닌 다른 사이즈의 Catphan이 해당 캔버스에 노출되면 안 되었기 때문에 다양한 방법으로 캔버스를 제작해 본 결과, target object만 여유있게 떼어내서(동그라미) 기본 캔버스에 붙이는 방식이 가장 자연스러웠습니다. 연구 결과가 정확히 나오지 않을 수 있기 때문에 이 문제를 반드시 해결해야 했고, 아래와 같은 과정을 통해 해결할 수 있었습니다.

  • Pillow(PIL) 라이브러리의 Image, ImageDraw를 사용하여 원형 마스크를 생성하고, target object 잘라내기
  • 위의 라이브러리를 사용해 투명 배경(PNG) 및 anti-aliasing 처리를 적용하여, 요소의 외곽선이 뭉개지거나 잘리는 현상 완화
  • random 라이브러리를 사용해 자른 target 이미지를 캔버스를 벗어나지 않도록 무작위 좌표에 반복 배치

|PyInstaller 실행 파일 내 CSV 저장 경로 불분명

.py 파일에서는 상대 경로를 통해 CSV 파일을 저장할 수 있었지만, PyInstaller로 실행 파일을 패키징한 뒤에는, 실행 환경이 임시 디렉토리에서 작동함에 따라 CSV 파일이 어디에 저장되는지 사용자 입장에서 알 수 없다는 문제가 발생했습니다. 이 문제는 아래와 같은 과정을 통해 해결할 수 있었습니다.

  • sys._MEIPASS와 os.path.dirname(sys.executable)을 조건적으로 사용하여, PyInstaller 환경에서의 실행 여부를 감지하고 실제 실행 파일 기준의 저장 경로를 명확히 지정
  • 저장 후 사용자에게 팝업 메세지로 저장 위치를 안내하는 기능 추가

프로젝트 성과 및 느낀점
|결과

튜토리얼, target object의 무작위 배치, 입력 결과의 CSV 파일 저장 등 계획한 주요 기능을 모두 안정적으로 구현하였습니다. 사용자 관점에서 직관적인 UI로 구성되었으며, 특히 사용자의 실제 업무 환경을 고려하여 프로그램을 설계했다는 점에서 의의가 있습니다.

|배운점 및 성장한 역량

기존에는 Python을 간단한 AI 모델 개발이나 코딩 테스트 준비에만 활용해왔지만, 이번 프로젝트를 통해 Python의 기본 GUI 라이브러리인 Tkinter와 PyInstaller를 활용하여 실사용 가능한 데스크톱 애플리케이션을 개발하고 실행 파일로 배포하는 과정까지 경험하였습니다. 이를 통해 Python의 활용 범위와 실제 소프트웨어 개발 흐름에 대한 이해를 넓힐 수 있었습니다.

|다음 개선 과제

해당 프로그램은 보안상의 이유로 로컬 환경에서 실행되게 간단하게 제작되었지만, 향후에는 여러 연구원들이 보다 편리하게 접근하고 재사용할 수 있도록 웹 기반 애플리케이션으로 확장하는 방안을 고려하고 있습니다.