본문 바로가기
이미지 처리

BPD 정확도 높이기, 편-안 🤭

by kkodecaffeine 2024. 12. 27.

시작하며;

초음파 이미지 내에서 태아의 머리 가로 길이를 (이하: BPD) 계산할 때 가장 어려움을 겪었던 것은 배율 계산이었다. 안타깝게도 우리의 초음파 영상 데이터는 DICOM 파일이 아닌 단순 녹화본이기 때문에 어떤 메타데이터도 얻을 수 없는 상황이었다. 하지만 링크를 통해 배율을 얻을 수 있었다. 더 좋은 방법이 찾겠지만 현재까지 시도했던 여러 방법 중에 오차가 가장 적었다. 그리고 여러 초음파 이미지를 대상으로 테스트를 진행했는데 두개골이 제대로 인식되지 않았다. 후-우 😭


무엇이 문제인가;

기존에 두개골을 찾는 방법은 아래와 같다. 문제는 초음파 내 원형을 찾을 때 HoughCircles 함수를 사용한다. 그러나 초음파 영상은 해상도가 상대적으로 낮고 영상 내에 정말 다양한 노이즈가 많다. 점선 원을 찾는 과정에서 원이 보이지 않으면 원의 크기를 키워나갈 때 내가 하드 코딩한 값으로 찾게 된다. 당장 내가 테스트한 이미지는 잘 인식이 되더라도 다른 이미지는 그것을 보장할 수 없다. 아래 예시가 그러하다. (아래 사진이 아닌) 다른 초음파 이미지에서는 배율이 축소된 영상인지 태아의 두개골이 작은 원이었다. 그래서 그 원을 인식하기 위해 값을 보정하면 아래 사진은 제대로 두개골이 인식이 되지 않는다. 기존 방법은 이미지 편차가 크다.

잘못 인식
상/하단 하얀색 테두리가 인식되어야 하는데 노란색을 원이라고 인식한다

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

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

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

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

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

가장 확실한 방법 찾기;

점선 패턴을 인식하는 방법을 선택했다. 점선 패턴은 BPD 를 측정할 때 모든 영상에 출력된다. 그리고 우리는 개발자이기 때문에 의사의 판단을 넘어서는 행위를 하면 안 된다고 생각했다. 그래서 점선 패턴을 인식하고 같은 선상에 있는 점들을 찾아냈다. 그리고 찾아낸 점들 중 가장 먼 좌표 간 거리를 계산하여 픽셀 거리를 획득했다.

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

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

점선 패턴 찾기:
> 이미지에서 점선으로 이루어진 패턴을 검출한다.

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

개선 전개선 후개선 후 (w/ 측정값)
개선 전/후


앞으로의 계획;

점선 패턴이 없는 것은 이미지 분석에서 제외해야 하고 원형 모양의 점선 패턴이 있는 것도 이미지 분석에서 제외해야 한다. 이미지 분류 단계에서 제외할 기준 등이 점점 더 세밀해지고 있다. 테스트를 좀 더 진행하여 튜닝을 좀 더 해보고 내년부터는 바로 데이터 라벨링을 진행하려고 한다.


return;