2012-10-22 2 views
6

저는 숙련 된 프로그래머가 아니므로 VS2010 프로젝트에 DICOM 뷰어를 추가하기 만하면됩니다. Windows Forms에서 이미지를 표시 할 수 있지만 창 중심과 너비를 변경하는 방법을 알 수 없습니다. 내 스크립트는 다음과 같습니다.Fellow Oak DICOM - 이미지 창 수준 변경

DicomImage image = new DicomImage(_filename); 
      int maxV = image.NumberOfFrames; 
      sbSlice.Maximum = maxV - 1; 
      image.WindowCenter = 7.0; 
      double wc = image.WindowCenter; 
      double ww = image.WindowWidth; 

      Image result = image.RenderImage(0); 
      DisplayImage(result); 

작동하지 않았습니다. 이것이 올바른 접근법인지 나는 모른다.

+0

사용중인 DICOM 라이브러리에 대해 좀 더 명확히 알 수 있습니까? –

+0

나는 Fellow Oak DICOM for .NET을 사용하고 있습니다. – hncl

+1

같은 질문을 * fo-dicom * 토론 포럼에 게시하고 실행중인 소프트웨어 버전에 창 수준 버그가 있다는 응답을 받았음을 알게되었습니다. * Stackoverflow *의 일관성을 위해 포럼 응답을 기반으로 여기에 자신의 대답을 제공하고 * fo-dicom * 버전 1.0.26을 실행 중임을 질문에 표시하는 것이 좋습니다. –

답변

1

코드를 살펴본 결과 코드가 매우 복잡해 보였습니다. WindowCenterWindowWidth 또는 속성을 설정하는 현재의 구현에서 버 https://github.com/rcd/fo-dicom/blob/master/DICOM/Imaging/DicomImage.cs

Monochrome1 또는 Load() 중 하나 인 Monochrome2 Dataset.Get (DicomTag.PhotometricInterpretation)에만 효과가 있습니다. 이것은 이미 우습다. 그러나 _renderOptions 변수는 한 곳에서만 설정되고 _pipeline 생성 (즉, WindowCenter 속성을 사용하여 변경할 기회가 제공되지 않음)에 즉시 사용되기 때문에 여전히 사용할 수 없습니다. 유일한 기회는 그레이 스케일 _renderOptions 초기화입니다 : _renderOptions = GrayscaleRenderOptions.FromDataset(Dataset);.

현재 솔루션 : 귀하의 데이터 세트가

  • DicomTag.WindowCenter 적절
  • DicomTag.WindowWidth != 0.0
  • DicomTag.PhotometricInterpretation == Monochrome1 또는 Monochrome2

다음 코드를 설정해야이 수행한다 :

DicomDataset dataset = DicomFile.Open(fileName).Dataset; 
//dataset.Set(DicomTag.WindowWidth, 200.0); //the WindowWidth must be non-zero 
dataset.Add(DicomTag.WindowCenter, "100.0"); 
//dataset.Add(DicomTag.PhotometricInterpretation, "MONOCHROME1"); //ValueRepresentations tag is broken 
dataset.Add(new DicomCodeString(DicomTag.PhotometricInterpretation, "MONOCHROME1")); 
DicomImage image = new DicomImage(dataset); 
image.RenderImage(); 

최상의 해결책 :이 버그가있는 라이브러리가 수정되는 동안 기다려주십시오.

+0

시간을내어 주셔서 감사합니다. 다음 코드에서 DicomDataset 클래스의 문제를 좁혔습니다. if (typeof (T) == typeof (decimal)) return 새 DicomDecimalString (tag, values.Cast () .ToArray()))); "System.Int32 유형의 값으로 DS 유형의 DICOM 요소를 만들 수 없습니다." Google 그룹에 게시했습니다. 전반적으로 나는 fo-Dicom이 더 나은 라이브러리 중 하나라는 것을 알았고, 많은 scucess없이 다른 툴킷에 지쳤습니다. – hncl

+0

이것이 왜 문제의 근원이라고 생각하십니까? 어딘가에 십진법이 있습니까? 질문에 게시 된 코드가 작동하면 WindowsCenter를 작동시키는 코드를 작성할 수 있다고 생각합니다. 추신 이미지가 회색조입니까? –

+0

이미지는 회색조입니다. 문제를 해결하기위한 내 해결 방법에 대한 링크는 다음과 같습니다. https://groups.google.com/forum/?fromgroups=#!topic/fo-dicom/ycnB25bAvq4. 감사합니다 – hncl

5

DicomImage 클래스는 이미지 뷰어를 구현하는 데 사용하기 위해 만들어지지 않았습니다. DICOM 덤프 유틸리티에서 미리보기 이미지를 렌더링하고 이미지 압축/압축 해제 코덱을 테스트하기 위해 생성되었습니다. 아마 그것을 도서관에 포함시키는 것은 실수 였을까요?

의도 한 기능을 훨씬 넘어서는 용도로 사용되는 경우 버그로 코드에서 오류를 발견하기가 어렵습니다.

즉, WindowCenter/WindowWidth 속성이 렌더링 된 이미지에 적용되도록 코드를 수정해야한다고했습니다. Git repo에서 이러한 수정 사항을 찾을 수 있습니다.

var img = new DicomImage(fileName); 
img.WindowCenter = 2048.0; 
img.WindowWidth = 4096.0; 
DisplayImage(img.RenderImage(0)); 
+1

감사합니다. 콜비, 대단히 감사합니다. 당신 말이 맞습니다. 저는 확장 된 기능을 위해 라이브러리를 사용하려고했습니다. 의심의 여지가 있지만 DICOM에 대한 나의 제한된 경험 때문입니다. 당신의 노력에 다시 한번 감사드립니다. – hncl