Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

메타데이터에서 Dicom을 유동적으로 연결할 수 있는 기능 구현 #191

Open
BEOKS opened this issue Feb 21, 2022 · 2 comments · Fixed by #202
Open

메타데이터에서 Dicom을 유동적으로 연결할 수 있는 기능 구현 #191

BEOKS opened this issue Feb 21, 2022 · 2 comments · Fixed by #202
Assignees
Labels
documentation Improvements or additions to documentation enhancement New feature or request

Comments

@BEOKS
Copy link
Owner

BEOKS commented Feb 21, 2022

Problem

각각의 레이블은 Dicom 파일과 Exam 또는 Instance 단위로 메타데이터에 저장될 수 있다. 현재 플랫폼에서는 StudyInstance UID를 기준으로 Dicom 이미지를 시각화하거나 다운로드 하기 때문에, Instance 단위 또는 그 이상으로 구분 할 수 있는 기능을 추가해야 한다.

Background

  1. Dicom 파일은 4가지의 Id를 사용한다.

  2. 4가지의 id는 계층적인 구조를 가지고 있다.

    https://user-images.githubusercontent.com/30094719/154407715-0943c3b6-252e-4dc3-9232-22b39ad05578.png

Solution

메타데이터와 스키마를 입력해서 Dicom과 연결

  1. 데이터는 복합적인 ID를 가진 메타데이터를 입력 할 수 있다.

image

  1. 사용자는 각 열의 역할을 정할 수 있는 스키마 정보를 Json형태로 업로드 한다.

    /*
    MANAGEMENT_ID : Dicom 파일을 삭제하기 위한 
    */
    { //example
    	anonymized_id : PATIENT_ID,
    	StudyInstanceUID : Management_ID,
    	category : PATIETN
    	...
    }

    ID를 새로 할당할 수 있는 기능이 필요하다?

1. 각 프로젝트에 Patient, Study, Series, Instance 단위의 탭을 추가

각 계층별로 메타데이터를 업로드 할 수 있으며, 메타데이터는 계층에 맞는 UID를 하나만 포함해야 한다.

https://user-images.githubusercontent.com/30094719/154410409-0d7dad3a-8989-44eb-9653-17b4d67f0921.png

2. 기존 구조 유지하며 ID를 자동으로 감지

UID는 csv 파일에 하나만 포함되어야 하며, StudyIntance UID의 경우 시각화와 연결을 위해서 다른 ID와 함께 포함시켜도 된다. 그럼 사용된 ID를 감지하여 기준으로 삼고, 이 기준에 맞춰 Dicom 파일을 삭제하거나 다운로드 할 수 있다.

https://user-images.githubusercontent.com/30094719/154584788-db9e50f9-583f-4d6e-a14f-971c3cde2113.png

3. 2개 이상의 ID가 포함된 CSV 데이터를 자동으로 파싱

CSV 데이터에서 계층적으로 ID를 파악하여 Nested 테이블을 생성하도록 한다. 이 경우, 하나의 ID에는 한 개의 레이블만 사용할 수 있다는 단점이 있다.
image

@BEOKS
Copy link
Owner Author

BEOKS commented Feb 21, 2022

Date : 2022.02.18

메타데이터와 스키마를 입력해서 Dicom과 연결

  1. 데이터는 복합적인 ID를 가진 메타데이터를 입력 할 수 있다.
    image

  2. 사용자는 각 열의 역할을 정할 수 있는 스키마 정보를 Json형태로 업로드 한다.

/*
MANAGEMENT_ID : Dicom 파일을 삭제하기 위한 
*/
{ //example
	anonymized_id : PATIENT_ID,
	StudyInstanceUID : Management_ID,
	category : PATIENT_LABEL,
        Instance_label1 : INSTANCE_LABEL
	...
}

Question & Enhancement

  1. 인스턴스 단위의 레이블과 스터디 단위의 레이블이 함께 있어야 하는가?
    • 만약 따로 존재해도 된다면 스키마를 입력할 필요가 없다.
    • 프로젝트 당 하나의 ID를 사용하는 것이 데이터 중복을 줄이고 업로드 다운로드 과정을 빠르게 진행할 수 있다.

    Example
    image
    프로젝트를 세분화 하면 다운로드를 요청할 때 필요한 부분만 선택할 수 있다.

@BEOKS BEOKS self-assigned this Feb 21, 2022
@BEOKS BEOKS added documentation Improvements or additions to documentation enhancement New feature or request labels Feb 21, 2022
@BEOKS
Copy link
Owner Author

BEOKS commented Feb 25, 2022

Date : 2020.02.25

Problem

인스턴스 레벨로 학습을 진행하더라고 Exam 단위의 레이블 값이 필요한 경우가 있으므로 CSV 파일은 두 가지 레벨 이상의 레이블이 공존해야 한다. 현재 구조에서 이를 적용하면, 중복되는 데이터가 많아 데이터를 업로드 하고 다운로드하는데 비용이 상당히 발생하므로 효율적인 구조로 재편해야 하기에, #191 (comment) 에서 언급했듯이 스키마 정보를 각 열에 설정해 주어야 한다.

Solution

  1. 업로드 과정에서, 메타데이터에서 서로 다른 레벨의 레이블이 포함될 경우 이를 각 레이블에 맞게 분리하는 label Divider를 추가한다.
    1. label Divier는 CSV 파일 내용과 스키마를 입력받으면 각 레벨 별로 메타데이터를 분리한다.
  2. 다운로드 과정에서 프로젝트와 관련된 label들을 가져와 이를 합치는 label Merger를 추가한다.
    1. label Merger는 분리된 메타데이터들을 입력받아 이를 원래의 CSV 파일 내용으로 복원한다.
      DSMP-Architecture-with-Dev_Ops-Data Scheme Process drawio (1)

BEOKS added a commit that referenced this issue Mar 2, 2022
중복된 CSV 파일을 레벨 단위로 나눌 수 있는
CsvLabelHandler.tsx 코드를 작성했습니다.
코드 테스트가 필요합니다.
BEOKS added a commit that referenced this issue Mar 2, 2022
CsvLabelHandler.test.ts에서 divideCsvWithLevel 기능에 대한
테스트를 진행하기 위해서 샘플 데이터와 간단한 테스트 코드를 추가했습니다.
BEOKS added a commit that referenced this issue Mar 2, 2022
jest를 WebStorm에서 실행 할 때, 에러가 발생하는 버그를 수정했습니다.
BEOKS added a commit that referenced this issue Mar 2, 2022
ts-jest의 버전이 jest와 호환이 되지 않아 발생하는 에러를
수정했습니다. 현재 사용하고 있는 ts-jest버전은 24.3.0이며
eslint-plugin-jest는 24.1.0을 사용하고있습니다.
BEOKS added a commit that referenced this issue Mar 2, 2022
csv 합성과 관련된 새로운 테스트 코드를
먼저 작성했습니다.
BEOKS added a commit that referenced this issue Mar 3, 2022
테스트를 위한 샘플 데이터에서 csvSlicesExample의
오류를 수정했습니다.
BEOKS added a commit that referenced this issue Mar 3, 2022
#191 - 메타데이터에서 Dicom을 유동적으로 연결할 수 있는 기능 구현
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation enhancement New feature or request
Projects
None yet
1 participant