DICOM(국제의료표준) 의료영상 라벨링 개선을 위한 라벨링툴 개발
국제의료표준인 DICOM을 공부하고 의료영상 라벨링 개선을 위한 라벨링툴을 개발하는 프로젝트입니다.
https://github.com/viroovr/InsightMedi
🔥 TEAM 살신성인 🔥
👨🏻💻 팀장: 서현원(성균관) – @Github Link
👩🏻💻 팀원: 박수연(성균관) – @Github Link
👩🏻💻 팀원: 김세은(인하) – @Github Link
MIT 라이센스를 준수하며 LICENSE
에서 자세한 정보를 확인할 수 있습니다.
[dicom file open viewer 개발 계획 수립]
- pydicom library 이용
- dicom 영상 file open하는 기능
- 영상 위에 bounding box 그리기 기능 필요
- bounding box에 대한 정보(좌표, label, color, 두께, ...)를 text file로 저장하는 기능 <-> bounding box text file을 토대로 영상에 표현해주는 기능
- 실제 이미지와 화면상의 좌표 싱크 맞추기 필요 (image point - 이미지의 좌표, view point - 사용자 화면 상의 좌표 맞추기) -> converter 만들기
- bounding box에 대한 pixel size 표시해주는 기능 추가
- 화면 크기에 맞추어 line, bounding box 늘어나도록 하기 (text file 이용하여)
- windowing level 바꾸는 기능 (WW, WL) WW: windowing width WL: windowing center
- 이미지 확대/축소 기능
[GUI 설계하기] https://jamboard.google.com/d/1iVxu9bzPdAtv3mv8FSZsVpwXUnWIn10biJ0JXpwbdPU/viewer?f=0
[Label drawing tool 구현]
- Straight line label drawing 구현
- Rectangle label drawing 구현
- Circle label drawing 구현
[Windowing tool 구현]
- windowing 공부 및 구현
- WW, WL 값 text 화면에 보여주기
- Inputdialog layout 및 0002.DCM도 windowing 조정되도록 수정하기
- 줌인/아웃 하거나 다른 어노테이션 이용하고 툴이용할때 connect 유지되는거 없애기
[Open file, label list 구현]
- 영상(.mp4) 파일 불러오기
- 라벨 리스트 목록 보여주기
- 슬라이더로 frame 조정하기
[label tool 기능 수정 및 Refacotiring]
- drawing부분 refactoring
- mp4파일 labeling
- label list에서 button click하면 해당 frame으로 넘어가서 해당 frame에 label file이 있으면 그려주기
- label erase 버튼 누르면 button 삭제 및 file 삭제
- label save 버튼 누르면 button 나오게 수정하기
[frame 관련 기능 구현 및 UI 수정]
- windowing RGB channel에서 하는 방법 찾아보기 및 수정
- 슬라이더 오른쪽에 전체 frame의 수와 현재 frame number 나타내기
- UI 색상 어둡게 변경하기
[frame 관련 기능 수정 및 UI 수정]
- frame update (slider bar / play button) 중복 호출 문제 해결
- canvas의 ax영역 deafult 색깔 설정하기
- Selector 만들기
- gui 사이드에 frame 버튼, label 버튼 생성
- selector기능에서 다른 annotation 이동 가능하게 하기
- tool status
- video status
- 연속적으로 annotation 이동, drawing, windowing 구현
- 각 기능에 맞게 cursor 모양 변경
- label dictionary 수정하기 ex) {”frame_number” : {“label id” : {label_dict_schema}, {”label id2” : {label_dict_schema}}
- 라벨 버튼 10개 with go button (현재 frame button) 나타나게 하기
- label button 클릭 시 label button과 go button에 변화 주기(글꼴 색깔, 굵기 변화)
- label button 클릭 시 rectangle label 그리기 모드로 전환되기
- go button 클릭 시 함수 구현하기
- canvas ax 축 안 보이게 하기
- 단일 객체 드래그 시 dict에서도 좌표값 옮기기
- 단일 객체 지우개 기능 사용 하면 dict에서도 지우기 (all_label set 에서도 지우기) (frame_label_dict, 화면에서 삭제, 라벨 버튼지우기)
- 라벨 저장 방식 수정하기: draw_annotation과 add_label 함수에서 label name assign 되는 방식 수정하기 draw_annotation에서 아예 label name을 함수의 parameter로 받도록
- dcm_data.py 파일에 frame을 입력하였을 때, self.dd.frame_label_dict에서 해당 frame에 있는 label들을 확인할 수 있는 함수 frame_label_check(self, frame) 함수 만들기 return은 label_list(해당 frame의 라벨들이 있는 리스트) 사용 예시 ex) frame_label_check(self.dd.frame_number)
- label button 클릭하면 기존 label은 삭제되고 새로운 label을 그릴 수 있도록 tool status를 바꿔주고 하나의 label을 그리고 나면 selector status로 변경될 수 있도록 label_button_clicked 함수 수정하기 + label 한 개 그리고 drawing disconnect
- 다른 파일 열면 활성화된 button들 다시 초기화 하기
- erase 하면 label 버튼 비활성화 및 라벨 삭제하기
- 전체 어노테이션 지우기 기능 수정
- 라벨 클릭시 해당 프레임 이동후 두께 강조
- 어노테이션 드로윙 마치면 다른 어노테이션 두께 원상태
- 랜덤 색상값으로 그리기 추가
- modift label data 함수 수정하기
- code refactoring
- viewer_gui refactoring
- control
- 윈도윙 끝나면 라벨 보여주기
- 기존 status bar에 있는 것들 화면으로 옮기기
- set_window_label
- set_tool_status_label
- set_frame_label (slider bar 옆에)
- status bar에는 현재 파일의 경로 보여주기로 변경
- delete all 하면 버튼 다 비활성화 되는 것 수정하기
- GUI design 마무리
- opencv object detection 알고리즘 관련 논문 리뷰
- TrackerBoosting, TrackerMIL, TrackerMOSSE, TLD, GOTURN, CSRT, KCF, MedianFlow 샘플 테스트 진행
- CSRT 알고리즘 채택
- CSRT 알고리즘 test_gui
- Bounding box drawing 기능 구현
- t누르며 바운딩박스 좌표값 얻기 → 좌표값을 프레임 dict에저장 → 프레임 업데이트
- 현재 한 프레임에 여러 개의 라벨이 있을 때, 딕셔너리에 저장된 첫 번째 라벨만 object tracking 됨 → 선택된 라벨이 object tracking 될 수 있도록 수정
- self.annotation 기능 구현
- multi object tracking 위해 check bbox 함수 return 형식 2차원 list로 수정
- tracking 수행할 시 지연 감소를 위한 refactoring 진행
- test sample DICOM file 제작
- tracking 정확도 개선
- 이미지 유사도 관련 opencv API 리서치
- 이미지 유사도 계산 함수 hsv 히스토그램으로 수정
- t 한번 누르면 영상 재생되면서 object tracking 되도록 수정
- 라벨 좌표 화면 밖으로 튀는 것 감지하기
- label button 클릭했을 때 현재 frame의 label 만 지워지도록 수정
- tracking 버튼 및 텍스트 박스 UI/UX 추가
- 화면을 벗어나는 라벨일 경우 object tracking 중지하도록 구현
- 코드 리팩토링
- 의료 비디오 영상 single/multi object tracking 시연 영상
- DICOM 형식 파일 시연 영상
- InsightMedi 오류 수정 및 최종 점검
"본 연구는 과학기술정보통신부 및 정보통신기획평가원의 SW전문인재양성사업의 연구결과로 수행되었음"(2022-0-01127)