Dieser Artikel beschreibt die Java -Methode zum Parsen von DCM -medizinischen Bilddateien und zum Extrahieren von Dateiinformationen. Teilen Sie es für Ihre Referenz wie folgt weiter:
1. Installation
Gehen Sie zuerst zu Github, um den Quellcode herunterzuladen, und führen Sie dann die MVN -Installation für die lokale Installation aus. Das Maven Central Repository hat nicht das Glas. . Nach erfolgreicher Installation lautet wie folgt:
Stellen Sie dann das JAR -Paket in die Datei pom.xml ein:
<Depopenty> <gruppe> org.dcm4che </GroupID> <artifactID> DCM4Che-Core </artifactId> <version> 3.3.2 </Version> </abhängig>
2. Kategorie Test
/** * ProjectName: xxx * Dateiname: displayTag.java * Packagename: com.xxxx.xxxx.common java.io.file; import java.io.ioxception; import java.sql.time; import java.util.arrays; import Java.util.date; import Java.util.logging.level; Import Java.util.logging.logger; org.dcm4che3.data.elementDictionary; import org.dcm4che3.data.fragments; import org.dcm4che3.data.sequence; org.dcm4che3.io.dicominputStream; import org.dcm4che3.io.dicomoutputStream; import org.dcm4che3.util.Safeclos; @className: displayTag * @packagename: com.xxxx.xxxx.common.util * @Description: Tag Parsing * @Data: 2018-03-26 10:07 **/Public Final Class DisplayTag {private statische Attribute OBJ = Null, Objekt = NULL; privates statisches DicominputStream DIN; privates statisches Doppel -Ergebnisfaktordix; private Zeichenfolge Ergebnis = NULL; privates doppeltes Ergebnis2 = null; private String nom = null; private String nounstring = null; private int val2 = 0; privat int valeursreturn; private String noununit = null; private statische doppelte resultfacteurdix = 0; private doppelt valuvalSpatial = null; private String noununitratio = null; privat dicominputstream dis; private static final char [] hex_digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', ',', 'F'}; private dicomencodingoptions decopts = dicomencodingoptions.default; private static elementDictionary dict = elementDictionary.getSpandardElementDictionary (); public displayTag (Dateidatei) {try {setObject (loadDicomObject (Datei)); } catch (ioException ex) {logger.getLogger (displayTag.class.getName ()). log (Level.Severe, null, ex); }} / ** * METADATA von DICOM 3.0 * @param f: Eingabedatei * @Return Attribute * @throws iOException * / public statische Attribute loadDicomObject (Datei f) löscht IOException {if (f == null) {return null aus; } else {dicominputStream dis = new DicominputStream (f); //ATTTR.SetSpecificCharacterset("GBK "); return dis.readdataset (-1, -1); }} / ** * Attractut * @param obj * / public void setObject (Attribute OBJ) {this.obj = obj; } / ** * Attribut von metadata geben * @return * / public statische Attribute getObject () {return obj; } / ** * metadata anzeigen * @param Datei: Datei inout * @throws ioException * / public String redeTagDicom (Dateidatei) löscht IOException {din = new dicominputStream (Datei) aus; Object = Din.ReadFilemetainFormation (); String value = Object.toString (); Object = Din.Readdataset (-1, -1); Rückgabewert; } / ** * Permet d'Afficher l'eure d'une valeur dicom en standard international yyyy.mm.dd / erlauben Displayzeit in Format yyyy.mm.dd yyyy.mm.dd sonst dd.mm.yyyyy * @param valuenoun: "dot" mettre la date en format yyyyy sonst yyyy mm oder dd mm yyyyy * @return afficher le String du Tag selon le Standard International/ return String Datum * @throws ioException */ public String dicomdate (int Tag, boolean ValueBool, String ValuEnoun) Throws IOException {if (getObject (). String tagdayFomat = formatDate (TagValue, ValueBool, ValuENoun); return tagdayFomat; } else {return null; }}/ ** * Permet d'Afficher l'Eure d'une valeur dicom en standard international yyyy.mm.dd/ erlauben eine Zeit in metadata für yyyy.mm.dd * @param Objekt * @param tag: valeur du Tag/ value of tagyy.m.m. Wenn echtes Format yyyy.mm.dd else dd.mm.yyyyyy * @param Valuum: "Dot" Mettre la Date en formatyyy.mm.dd ou dd.mm.yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy.mm.mm.mm.mm.mm.mm.mm.mm.mm.mm.mm.mm.mm.mmmdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd. dd.mm.yyyy sonst yyyy mm oder dd mm yyyy * @return afficher le String du Tag selon lE Standard International/ return String Datum * @Throws ioException Formatdat (TagValue, ValueBool, Valuation); Format yyyy mm dd oder dd mm yyyyy *@return */public static String Formatdat (String numero, boolean ValueBool, String Valuenoun) {if (numero.matches ("^[0-9] *$") {// if la cain de caractère un-nombre u un (), wenn (nombre u Un-u un-ou un-u un-ou un-ou == true) {// Format yyyy.mm.dd für (int i = 0, j = numero.length (); i <j; i ++) {R.Append (numero.charat (i)); R.Append ('.'); Valuenoun.Equals ("Dot") {R.Append ('.'); ) {if (valuENoun == null? "dot" == null: valuenoun.equals ("dot") {r.Append ('.'); Index usw. wie für die Array -Indexierung. GetheaderDateValue (String tagnr) {return getheaderDateValue (TotAgint (Tagnr)); Die String -Darstellung einer Header -Nummer * EG 0008,0010 an die entsprechende Ganzzahl als 0x00080010 * wie in der @see org.dcm4che2.data.tag * @param headernr z. Integer.ParseInt (Headernr.Replaceall (",", ""), 16); of VR = DA * @param tagNr :"0000,0010" * @param dicomObj * @return */ public Date getHeaderDateValue(String tagNr,Attributes dicomObj) { return getHeaderDateValue(toTagInt(tagNr), dicomObj); } /** * Remove string ^ in file dicom * @param num * @return */ public static String textDicom (String num) {num = num.replaceall ("//^+", ""); an String String TagValue = Arrays.aSlist (TagValue2) .ToString (); Tabelle in String String TagValue = displayTag.ArrayToString (TagValue2, "//"); StringBuffer (); (0008,0031) zur S -Serie -Zeit * (0008,0032) zur S -Erfassungszeit * (0008,0033) Bei S -Bildzeit * @param Tag: Tag geben * @return * @throws ioException */ public String dicomtime (int tag) löscht ioException {if (getObject ().). getObject (). GetString (Tag); S -Serienzeit * (0008,0032) Bei S -Erwerbszeit * (0008,0033) Bei S -Bildzeit * @param Tag: Tag * @Return * @Throws IOException */ public String dicomtimetotal (int tags) löscht ioException {if (getObject () TagTimeFomat = FormAmle (TagValue); @param tag: value dicom Formatnimes (TagValuenotdot); @Return New Value String * @Throws IOException */ public String dicomTime3 (Attribute Object, int Tag) löst ioException {String tagvalue = ObjectString (Tag); Int GetheaderIntegerValue (int tagnr) {return getObject (). getint (tagnr, 0); GetheaderIntegerValue (String tagnr) {return getheaderIntegerValue (TotAgint (Tagnr)); Das angegebene Tag * @param tagnr * @return * / public boolean contentSheadertag (int tagnr) {return getObject () enthält (tagnr); Header Field * @param tagnr * @return Der Name des Feldes z. Getheader (int tagnr) {try {String dcMele = getObject (). GetString (Tagnr); getObject (). Tags (); @Return * / public boolean isEmpty () {if (getObject () == null || getObject (). Isempty ()) {return true; * @param headernr EG 0008,0010 * @return 0x00080010 als int */ public static int totagint2 (String headernr) {return Integer num.trim (). Ersatz ("[^0-9 //]", ""); {StringBuilder r = neuer StringBuilder () für (int i = 0, j = 6; i <j; i ++) {R.Append (numero.charat (i)); hh.mm.ss.frac * @param numero * @return */ public statische String-Formattimes (String numero) {if (numero.patches ("^[0-9] % 2 == 1) & (i <5)) {R.Append (':'); Math.floor ((a * p) +0.5)/p; * / public double getfactorpower () {return resultfactordix; @Return * @Throws IOException */ public int [] lattricepixeldata2 () löst ioException {int [] data = getObject (). lattricepixeldatabytes (Attribute dcmobj) löscht ioException {byte [] data = dcmobj.getBytes (Tag.Pixeldata); GetObject (). w, h) // Writableraster Raster = (Writableraster) GetMyImage (); Pixeldata *@return */ privat int [] getPixeldata (int [] [] data2) {int h = data2.Length; Data2 [y] [x]; // ligne}} Return Array; = neuer DicominputStream (fis); = 0; inputFile: Datei * @param tag: vr = sq * @return i ++) {Attribute attr = seq.get (i); String Valuestring = NULL; Sq * @param tag: * - RegionSpatialFormat * - RegionDatatype * - PhysicalUnitsXDirection * - PhysicalUnitsXDirection * - PixelComponentphysicalunits * * * * @param Ergebnis: Wert String */ public void Unit (int Tag, String -Ergebnis) {if (tagi == tag. Tag. Regionspatial) {val2 = Integer.Valueof (Ergebnis) .IntValue (); // CONVERTIE EN INT SWITCH (VAL2) {CASE 5: SETNOUNIT ("Graphics"); this.setNoununit ("M-Modus (Gewebe oder Fluss)"); Integer.Valueof (Ergebnis) .IntValue (); Trace "); Break; Fall 8: setNoununit (" Volumenspuren "); Break; Fall 7: setNoununit (" Doppler max Trace "); Break; Fall 6: this.setNoununit (" Doppler -Modus "); break; case 3: this.setNounUnit("PW Spectral Doppler"); break; case 2: this.setNounUnit("Color Flow"); break; case 1: this.setNounUnit("Tissue"); break; case 0: this.setNounUnit("None or not applicable"); break; default: break; } switch (result) { case "A": this.setNounUnit("ECG Trace "); Break; Fall" B ": this.setNoununit (" Puls -Trace "); Break; Fall" C ": this.setNoununit (" Phonocardiogramm -Trace "); Break; Fall" D ": Diese. Rückstreuung "); Break; Standard: return;}} else if (tag == tag.physicalunitsXDirection || tag == Tag.PhysicalUnitsXDirection || tag == tag.pixelComponentphysicalunits) {Val2 = Integer setnounit ("cm*cm.pixel/Sek." break; case 4: setNounUnit("seconds/pixel"); break; case 3: this.setNounUnit("cm/pixel"); break; case 2: this.setNounUnit("dB/pixel"); break; case 1: this.setNounUnit("percent/pixel"); break; case 0: this.setNounUnit("None or not applicable"); break; default: break; } switch (result) {case "a": this.setnounit ("cm*cm*cm/pixel"); ) val2 = Integer.Valueof (Ergebnis). this.setNounUnit("Color Flow Intensity"); break; case 4: setNounUnit("Color Flow Variance"); break; case 3: this.setNounUnit("Color Flow Velocity"); break; case 2: this.setNounUnit("Spectral doppler"); break; case 1: this.setNounUnit("Tissue"); break; case 0: this.setNounUnit("None or Nicht zutreffend "); break; Standard: break;} if (" a ".equals (result)) {this.setNoununit (" Gewebeklassifizierung ");}} else {this.setNoununit (" Keine oder nicht anwendbar ");}} / ** * Enregistre l'itrita des items / @param nonunit @param nunitn. */ public String setNounit (String noununit) {return this.noununit = noununit; MM * @param Tag: Entree Choisi * - PhysicalUnitsXDirection * - PhysicalunitSyDirection * -pixelComponentphysicalunits * * @param Ergebnis: Prend l'Unite */ public void UnitratioSpatial (Int -Tag, String -Ergebnis) {if (taidal == physicsicsicsicsicSXdirection || || || || || Tag.pixelcomponentphysicalunits) {val2 = Integer.ValueOf (Ergebnis) .IntValue (); // CONVERTIE EN INT SWITT (VAL2) {CASE 9: Double ValuePatial1 = GetValeurTagitemDowleratio ()* setfacteurpuissance (10,1); setNoununitratio ("mm*mm.pixel/sec"); setnounitratio ("mm*pixel/Sek." this.setnoununitratio ("mm/pixel"); anwendbar "); Break; Standard: Break;} Switch (Ergebnis) {Fall" a ": double valueSpatial3 = getValeurTAgitemDoublobleratio ()*setfacteurpuissance (10,2); SettagitemDoubleratio (ValueSpatial3); // Prend la valeur this.setnountiO; "B": doppelte Werte 4 = GetValeurTAgitemDoulbleratio ()*setfacteurpuissance (10,2); }}/** * prend la valeur d'un räumlich/put value -Verhältnis räumlich * @param valuesPatial GetValeurtagItemDoubleratio () {return valuesPatial; } / ** * obtient la valeur de puissance / value Power * @return * / public static double getfacteurpuissance () {return resultfacteurdix; this.noununitratio = noununitratio; Des items./giving Unity items * @return le nom de l'ité */ public String getNoununitratio () {return noununitRatio; }/ ** * prend la Valeur interne d'un tag item/ put tag item * @param result * @return */ public String settagitem (String -Ergebnis) {return this.result = result; }/** * donne la valeur du tag rachercher/geben einen Wert von Tag such * @return le String de la Valeur Rachercher du Tag Dans un itel item */public String getValeurTagitem () {Rückgabeergebnis; }/ ** * prend la Valeur interne d'un tag item/ post tag tag itemù * @return */ public double settagItemDouble (Double result2) {return this.result2 = result2; }/** * DONNE LA VALEUR DU TAG RACHERCER/Geben Sie den Wertschild * @return le double de la Valeur Rachercher du Tag dans un item */public double getValeurTAUtemDouble () {return Ergebnis2; } / ** * liest einen String -Wert aus dem Tag dicom (dcm4che2) * @param tagnr Das Tag zum Lesen * @return den Wert als Zeichenfolge zurückgibt den spezifischen Zeichensatz, der durch Attributspezifische Zeichen des Zeichens definiert ist (0008.0005) * dieses oder der Stammdatensatz, fall elem = getObject (); Elem.SetSpecificCharacterset ("GB18030"); String val = elem.getString (Tagnr); if (val == null) {val = ""; } return val; } catch (Ausnahme e) {return ""; }} / ** * liest einen String -Wert aus tag dicom (dcm4che2) * @param tagnr Das Tag zum Lesen * @return den Wert als String * Gibt den spezifischen Zeichensatz zurück, der durch Attributspezifische Zeichen des Zeichens definiert ist (0008.0005) * dieser oder der Root Data Set, falls dies ein verschachtelter Datensatz ist, der in einem Sequenz -Elemen -Aufsatz in einem Sequenz -Elemce -Elemen -Elemen -STARTS -STARTE -STARTE -SETS -SETS -SETS -SETS -Set [] -Spublikum * / Public -Sting [] -Spusiness [] getheaDerString (Into -Elemce Eleme -Eleme) []. {System.out.println (222); Attribute elem = getObject (); Elem.SetSpecificCharacterset ("GB18030"); String [] val = elem.getStrings (Tagnr); Rückkehr val; } catch (Ausnahme e) {return null; }} / ** * liest einen String -Wert aus dem DicomHeader * @param tagnr Das zu lesen * @param dcMelement * @return den Wert als String * / public String -GetheaderStringValue (Attribute DCMelement, int tagnr) {try {system.outln (333); /* dcMelement.setSpecificCharacacterset ("iso_ir 100"); */ dcMelement.setSpecificCharacterset ("GB18030"); String val = dcMelement.getString (Tagnr); if (val == null) {val = ""; } return val; } catch (Ausnahme e) {return ""; }} / ** * liest das Tag (Gruppe, Element) * @param headernr eg "0018,0050", um die Scheibendicke zu erhalten. return getheaderstringValue (totagint (headernr)); } / ** * Zeit ein tag ("xxxx,") * @param tagnr * @return * / public time getheadertImevalue (string tagnr) {return getheadertImevalue (totagint (totagint (totagint (totagint))); } / ** * Zeit ein Tag geben * @param tagnr * @return time * / public time getHeadertimevalue (int tagnr) {String time = getheaderStringValue (Tagnr); if (time.length ()! = 6) {return null; } try {int stündel = integer.parseInt (time.substring (0,2)); int min = Integer.ParseInt (time.substring (2,4)); int sec = Integer.ParseInt (time.substring (4,6)); Neue Zeit zurückgeben (Stunde, min, Sec); } catch (Ausnahme e) {} return null; } /** * ruft einen bestimmten Headertag ab, der sich im Anotehr -Tag befindet * oder "0008.0102, 0054.0220", um den Codierungsschema -Designer nach Ansicht Code -Sequenz * @Return String * * @param Taghierarchy zu erhalten; EG {Tag.Uid, Tag.SopinStanceUid, Tag.Codemeaning} * @return */ public String getheadervalueinsidetag (int [] taghierarchy) {try {für (int i = 0; i <taghierarchy.Length-1; i ++) {return getObject (). }} catch (Ausnahme e) {String tags = ""; für (int i = 0; i <taghierarchy.length; i ++) {tags += totagstring (Taghierarchie [i]) +""; } zurückkehren ""; } return null; } / ** * konvertiert die Int -Darstellung einer Header -Nummer * z. } public static String ShortTohex (int val) {char [] ch = new char [4]; ShortTohex (Val, Ch, 0); neue Zeichenfolge zurückgeben (ch); } public static StringBuffer ShortTohex (int val, StringBuffer SB) {sb.append (hex_digits [(val >> 12) & 0xf]); sb.Append (hex_digits [(val >> 8) & 0xf]); sb.Append (hex_digits [(val >> 4) & 0xf]); sb.Append (hex_digits [val & 0xf]); Return SB; } public static void ShortTohex (int val, char [] ch, int off) {ch [off] = hex_digits [(val >> 12) & 0xf]; ch [off+1] = hex_digits [(val >> 8) & 0xf]; ch [off+2] = hex_digits [(val >> 4) & 0xf]; ch [off+3] = hex_digits [val & 0xf]; } / ** * Dateiausgabe erstellen dicom * @param fileOutput: Dateiausgabe * @throws ioException * * * Beispiel: * * * * * * / public void writeTo (DateidateiOutput, Attributs fmi, Attributs -Objekt) löscht IOException {dicomoutputStream aus. dos.setencodingoptions (Encopts); dos.writedataset (fMI, Objekt); dos.finish (); dos.flush (); } / ** * schriftlich * @param FileOutput * @param h * @param w * @throws ioException * / public void writeTosegment (DateidateiOutput, int H, int w) löst ioException aus {dicomoutputStream dos = new dicomoutputStream (neue Datei (Datei -Datei -Datei). dos.setencodingoptions (Encopts); } / ** * Erstellen von Overlay in Pixeldata * @param Object * / public void Overlaycreate (Attribute Object) {int Position = Object.getInt (tag.overlaybitposition, 0); if (Position == 0) {return; } int bit = 1 << Position; int [] pixels = Object.getInts (Tag.pixeldata); int count = 0; für (int pix: pixel) {int overlay = pix & bit; pixel [count ++] = pix - obere; } object.setint (tag.pixeldata, vr.ow, pixel); } /*** dicom.setString (tag.performingPhysicianName, vr.pn, "Jean"); dicom.setString (tag.adMitingDiagnosesDescription, vr.lo, "chu"); Sequenz seq = dicom.newsequence (tag.anatomicregionsequence, 0); Attribute dicom2 = neue Attribute (); * @param dicom */ public void setItem (Attribute dicom, int Tagsequencename) {Sequence seq = dicom.newSequence (Tagsequencename, 0); Dicom.setString (Tag.CodingSchemedesignator, vr.sh, "srt"); dicom.setstring (Tag.CodeValue, vr.sh, "t-aa000"); dicom.setstring (Tag.Codemeaning, vr.lo, "eye"); seq.add (dicom); } public static void main (string [] args) löst Ausnahme aus {Datei Datei = new File ("c: // user // fendo // dokumente // WeChat -Dateien // fen_do // Dateien // 1234.dcm"); DisplayTag d = new displayTag (Datei); @SuppressWarnings ("static-access") Attribute attrs = d.LoloadDicomObject (Datei); // Alle Attributinformationssysteme ausgeben. // REG int row = attr.getint (tag.rows, 1) erhalten; // Spalten int columns = attr.getint (Tag.Columns, 1); // Fensterbreite Fenster float win_center = attr.getFloat (Tag.WindowCenter, 1); float win_width = attr.getfloat (Tag.Windowwidth, 1); System.out.println("" + "row=" + row + ",columns=" + row + ",row*columns = " + row * columns); String patientName = attrs.getString(Tag.PatientName, ""); System.out.println("Name:" + patientName); //Birthday String patientBirthDate = attrs.getString(Tag.PatientBirthDate, ""); System.out.println("Birthday: " + patientBirthDate); //Institution String institution = attrs.getString(Tag.InstitutionName, ""); System.out.println("Institution: " + institution); //Site String station = attrs.getString(Tag.StationName, ""); System.out.println("Site: " + station); //Manufacturer String Manufacturer = attrs.getString(Tag.Manufacturer, ""); System.out.println("Manufacturer: " + Manufacturer); //Manufacturer Model String ManufacturerModelName = attrs.getString(Tag.ManufacturerModelName, ""); System.out.println("ManufacturerModelName: " + ManufacturerModelName); //Description--Atrial String description = attrs.getString(Tag.StudyDescription, ""); System.out.println("Description--Atrial: " + Description); //Description--Specific String SeriesDescription = attrs.getString(Tag.SeriesDescription, ""); System.out.println("Description--Specific: " + SeriesDescription); //Description time String studyData = attrs.getString(Tag.StudyDate, ""); System.out.println("Description time: " + studyData); byte[] bytename = attrs.getBytes(Tag.PatientName); System.out.println("Name: " + new String(bytename,"gb18030")); byte[] bytesex = attrs.getBytes(Tag.PatientSex); System.out.println("Gender: " + new String(bytesex,"gb18030")); }}输出如下:
所有信息: (0008,0005) CS [ISO_IR 100] SpecificCharacterSet
(0008,0008) CS [ORIGINAL/PRIMARY] ImageType
(0008,0016) UI [1.2.840.10008.5.1.4.1.1.1.1] SOPClassUID
(0008,0018) UI [1.2.840.113619.2.203.4.2147483647.1486521160.448521] SOPInstan
(0008,0020) DA [20170208] StudyDate
(0008,0021) DA [20170208] SeriesDate
(0008,0022) DA [20170208] AcquisitionDate
(0008,0023) DA [20170208] ContentDate
(0008,002A) DT [20170208103237.000000] AcquisitionDateTime
(0008,0030) TM [103154.000] StudyTime
(0008,0031) TM [103158.000] SeriesTime
(0008,0032) TM [103237.000] AcquisitionTime
(0008,0033) TM [103240.000] ContentTime
(0008,0050) SH [T77792] AccessionNumber
(0008,0060) CS [DX] Modality
(0008,0068) CS [FOR PRESENTATION] PresentationIntentType
(0008,0070) LO ["GE Healthcare"] Manufacturer
(0008,0080) LO [HeFei RICH] InstitutionName
(0008,0081) ST [Not Initialized
Not Initialized
HeFei
AnHui
Not Initialize(0008,0090) PN [] ReferringPhysicianName
(0008,1010) SH [082407110134] StationName
(0008,1030) LO [ACHEST] StudyDescription
(0008,103E) LO [Chest] SeriesDescription
(0008,1040) LO [Not Initialized] InstitutionalDepartmentName
(0008,1050) PN [] PerformingPhysicianName
(0008,1090) LO ["Definium 6000"] ManufacturerModelName
(0008,1110) SQ [] ReferencedStudySequence
(0008,1120) SQ [] ReferencedPatientSequence
(0008,2112) SQ [1 Items] SourceImageSequence
>Item #1
>(0008,1150) UI [1.2.840.10008.5.1.4.1.1.1.1.1] ReferencedSOPClassUID
>(0008,1155) UI [1.2.840.113619.2.203.4.2147483647.1486521157.927189] Referenc
(0008,2218) SQ [1 Items] AnatomicRegionSequence
>Item #1
>(0008,0100) SH [T-D3000] CodeValue
>(0008,0102) SH [SNM3] CodingSchemeDesignator
>(0008,0104) LO [Chest] CodeMeaning
(0010,0010) PN [zhang^xiao di] PatientName
(0010,0020) LO [T77792] PatientID
(0010,0030) DA [19860618] PatientBirthDate
(0010,0032) TM [] PatientBirthTime
(0010,0040) CS [F] PatientSex
(0010,1010) AS [030Y] PatientAge
(0010,1030) DS [] PatientWeight
(0011,0010) LO [GEMS_GDXE_FALCON_04]
(0011,1003) UI [1.2.840.113619.2.203.4.2147483647.1486521118.562807]
(0011,1004) CS [SE]
(0011,1005) UI [1.2.840.113619.2.203.4.2147483647.1486521152.970120]
(0011,1006) DS [0.083936]
(0011,1009) SL [0]
...
row=2021,columns=2021,row*columns = 4084441
姓名:zhang^xiao di
生日:19860618
机构:HeFei RICH
站点:082407110134
制造商:"GE Healthcare"
制造商模型:"Definium 6000"
描述--心房:ACHEST
描述--具体:Chest
描述时间:20170208
姓名: zhang^xiao di
性别: F
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.