2015-10-13 17 views
5

Tôi đang sử dụng thư viện DCMTK (3.6.0) để nhận giá trị của thẻ (0020,0013) là số hình ảnh còn gọi là số slice của serie.Trường DICOM có nhiều giá trị hơn mong đợi

tôi sử dụng sau đây trong một tập lệnh batch

for /f "tokens=2 delims=[]" %%a in ('@echo. ^|c:\Libs\dcmtk-3.6.0\bin\dcmdump +P "0020,0013" %%i') do (set img_no=%%a) 

Nó thường suôn sẻ, nhưng đôi khi giá trị này luôn được thiết lập để '0' để toàn bộ serie.

tôi đã cố gắng để đổ rằng với lệnh này

C:\Libs\dcmtk-3.6.0\bin>dcmdump +P "0020,0013" PathToInvalideDICOM\img.dcm 
(0020,0013) IS [0]          # 2, 1 InstanceNumber 
(0020,0013) IS [4]          # 2, 1 InstanceNumber 
(0020,0013) IS [0]          # 2, 1 InstanceNumber 

C:\Libs\dcmtk-3.6.0\bin>dcmdump +P "0020,0013" PathToCorrectDICOM\img.dcm 
(0020,0013) IS [0]          # 2, 1 InstanceNumber 
(0020,0013) IS [5]          # 2, 1 InstanceNumber 

Như chúng ta có thể thấy, đôi khi giá trị để có được (mà không phải là '0') là người cuối cùng. Trong trường hợp này, mọi thứ đều tốt. Nhưng trong một số trường hợp cụ thể, giá trị chính xác được lưu trữ giữa hai '0'.

Tôi cũng đã thử với trình dumper khác (DCM4CHE 2.0.23) và nó cho tôi kết quả tương tự.

Tôi muốn biết tại sao điều này xảy ra. Và hơn thế nữa, làm thế nào để có được giá trị chính xác?

Có cách nào, trong tệp lô, để loại bỏ số 0 cho đến khi số chính xác không?

Theo mặc định, dòng lệnh của tôi được trích dẫn ở trên có trường cuối cùng ... Tôi nghĩ vậy.

Trả lời

6

Nhiều khả năng, các thẻ InstanceNumber thêm là một phần của một trình tự dicom và có thể không phải là thứ bạn muốn.

Nếu bạn chạy dcmdump như thế này:

dcmdump +p +P "0020,0013" PathToInvalideDICOM\img.dcm 

Bạn nên nhận được đầu ra scoped đầy đủ như:

(0008,1111).(0020,0013) IS [0]          # 2, 1 InstanceNumber 
(0020,0013) IS [1]          # 2, 1 InstanceNumber 
(5200,9230).(2005,140f).(0020,0013) IS [1]          # 2, 1 InstanceNumber 

Sau đó, nó phải là một vấn đề chỉ là xác nhận chính xác InstanceNumber bạn thực sự muốn (có lẽ là cái toàn cục)

Trong một tệp hàng loạt, bạn có thể muốn thực hiện một công cụ tìm kiếm để chọn ra dòng. Bạn có thể muốn thử:

dcmdump +p +P "0020,0013" PathToInvalideDICOM\img.dcm | findstr /b (0020 

Để rút thẻ "InstanceNumber" toàn cầu. Sau đó, bạn sẽ có thể phân tích cú pháp các thẻ như bạn có.

+0

Nó cho tôi một cái gì đó tương tự. Tôi vẫn có 3 số thể hiện bằng 0,4 và 0. Rõ ràng, tôi muốn số 4, mà là ở giữa. Thẻ này là (0020,0013). Và tôi làm '('@echo.^| C: \ Libs \ dcmtk-3.6.0 \ bin \ dcmdump + p + P" 0020,0013 "%% i')' nhưng vẫn có giá trị cuối cùng là 0. .. Làm thế nào để tiến hành ? – Raccoon

1
  • Thêm so sánh bên trong vòng lặp:

    for /f "tokens=2 delims=[]" %%a in (' 
        @echo. ^|c:\Libs\dcmtk-3.6.0\bin\dcmdump +P "0020,0013" %%i 
    ') do (
        if not "%%a"=="0" set img_no=%%a 
    ) 
    
  • hoặc lọc ra các [0] với find:

    for /f "tokens=2 delims=[]" %%a in (' 
        @echo. ^|c:\Libs\dcmtk-3.6.0\bin\dcmdump +P "0020,0013" %%i ^|find /v "[0]" 
    ') do set img_no=%%a 
    
Các vấn đề liên quan