본문 바로가기
이미지 처리

초음파 영상/이미지 內 관심사 인식 및 측정

by kkodecaffeine 2024. 12. 14.

시작하며;

초음파 영상 데이터가 쌓여만 가는 상황이다. 특히, 23년 10월 삼성메디슨이 공개한 서비스를 통해 우리가 가진 데이터를 어떤 형태로든 활용해보면 좋을 것 같다는 취지에서 스터디 모임을 계획/시작했다.
 
우리의 초음파 영상 데이터는 DICOM 파일이 아닌 단순 녹화본이다. 영상에 대한 메타데이터를 제공받지 못하는 상황이다. 그래서 최초 회의 때 OCR 등을 활용해서 특수문자/숫자 등을 인식시키는 방법 말곤 우리가 원하는 데이터를 직접 측정하고 출력하지 못하는 상황이라고 단정지었다. 객체 인식을 위한 여러 사례와 라이브러리 등을 조사하고 공유했다.
 
초음파 영상에는 다양한 정보가 있고 영상 내에 용어와 함께 수치/기록 등을 제공하고 있다. 단순하게 ChatGPT 등을 활용해서 우리가 검출하고자 하는 정보 (용어)를 찾을 수 있지만 내 아이 초음파 영상만 하더라도 정보가 (용어) 영상 내에 보이지 않았다. 너무 복불복이었다. 
 
이 때부터 호기심이 들었다. 정말 OCR 인식 말고는 우리가 할 수 있는 것은 없을까?


가설 검증;

대부분의 녹화본에는 스케일바가 있다. 여기서 픽셀 당 실제거리 (cm/pixel) 을 구할 수 있다고 판단했다. 그래서 내가 원하는 두 점 사이의 거리 (단순 픽셀 거리) 곱하기 cm/pixel 을 곱하면 실제 거리를 구할 수 있다고 생각했다. cm/pixel 이 배율인 셈이다. 

BPD 예시가설 검증
가설 검증

 

실제로는 8.22 cm 로 기록되었고 내가 측정한 기록값은 8.29 cm 로 오차는 크지 않았다. 가설을 검증했고 충분히 해볼 만하고 생각했다. 다만 아래와 같은 해결 과제가 남았다. 첫 번째는 계산 시 (14 cm / 스케일 바 픽셀 거리) 로 하드코딩해서 배율을 계산했기 때문에 스케일 바를 검출하는 이미지 전처리 과정이 필요했다. 두 번째는 초록색 영역 검출 시 곡선과 같은 형태 두 개를 찾고 그 사이 거리를 찾는 식이라 이미지별로 다소 편차가 있었다. 내 눈에는 원처럼 보이는데 컴퓨터가 인식할 때는 원으로 인식하지 않아서 반원 곡선 형태를 찾도록 코딩했다.


이미지 전처리 추가;

이미지 전처리 과정을 거쳐서 원하는 영역을 추출하도록 개선했다. 이미지 전 처리 과정이 잘 구축해두면 정확도가 높아진다. 이미지 전 처리 과정은 다음과 같다:

이미지 읽기:
> 초음파 이미지를 컴퓨터가 읽을 수 있는 형태로 가져온다.

이미지 준비:
> (전처리)이미지를 선명하게 만들거나, 점선 원을 찾기 쉽게 테두리를 강조한다.

점선 원 찾기:
> 이미지에서 점선으로 이루어진 동그라미(원)을 검출한다.
> 원이 보이지 않으면 원의 크기를 키우거나 조건을 바꿔 여러 번 다시 시도한다.

원 주변 처리 (마스킹):
> 찾은 원을 기준으로 이미지를 잘라내고, 원 바깥부분은 지운다.
> 예를 들어, 원 안쪽만 남기고 나머지를 흐리게 처리할 수도 있다.

결과 저장:
> 이렇게 처리된 이미지를 지정된 경로에 저장한다.
> 최종적으로 필요한 부분만 남은 이미지를 얻게 된다.

원본마스킹 이미지측정된 이미지
원본 이미지 / 마스킹 이미지 / 측정된 이미지
원본마스킹 이미지측정된 이미지
원본 이미지 / 마스킹 이미지 / 측정된 이미지


가장 큰 벽;

아직 갈 길이 멀지만 당장 큰 벽은 스케일 바 눈금을 측정하는 것이다. 즉, 배율 정보를 구하는 것이다. DICOM 파일이었다면 pixel spacing 값을 바로 사용하면 된다. 단순히 눈금 패턴을 일어보려 했는데 아래와 같이 나오는 경우도 있었다. 꽤나 힘든 과정일 것 같다. 삽질을 꽤나 해야겠다.

잘못 인식된 영역


return;

초음파 이미지의 다양한 촬영 상황과 해상도 차이로 인해, 이미지 자체만으로는 부위나 측정값을 정확히 구분하기 어려웠다. 그래서 이미지 안에 표시된 어노테이션을 OCR 로 읽어 부위와 값을 판별하는 방식으로 문제를 정리했다.