Este artículo describe el método Java para analizar archivos de imagen médica DCM y extraer información del archivo. Compártelo para su referencia, como sigue:
1. Instalación
Primero, vaya a GitHub para descargar el código fuente y luego ejecute la instalación de MVN para la instalación local. El repositorio central Maven no tiene el frasco. . Después de una instalación exitosa, lo siguiente es el siguiente:
Luego introduzca el paquete jar en el archivo pom.xml:
<Spendency> <MoupRoD> org.dcm4che </groupid> <artifactid> dcm4che-core </arfactid> <versión> 3.3.2 </versión> </pendency>
2. Categoría de prueba
/** * ProjectName: xxx * FileName: displaytag.java * PackageName: com.xxxx.xxxx.common.util * Fecha: 2018-03-26 10:07 * Copyright (c) 2017-2020 XXX Company */paquete com.gz.medicine.comomon.util; importar java.awt.image; java.io.file; import java.io.ioexception; import java.sql.time; import java.util.arrays; import java.util.date; import java.util.logging.level; import java.util.logging.logger; import org.cm4che3.data.attributes; import; importar; import org. org.dcm4che3.io.dicominputstream; import og.dcm4che3.io.dicomoutputstream; import og.dcm4che3.util.safeClose; import java.awt.image.raster; import java.io.ioexception; import java.util.arrays;/** * @version: V1.0 * * @classname: displaytag * @packageName: com.xxxx.xxxx.common.util * @Description: etiqueta parsing * @data: 2018-03-26 10:07 **/public Final Clase DisplayTag {private Static Attributes obj = null, objeto = null; DiCominputStream Din static staticStream privado; Provente de doble resultado estático privado; Resultado de cadena privada = nulo; Doble resultado privado2 = nulo; cadena privada nom = null; String private nomstring = null; private int val2 = 0; privado int Valeurreturn; String private sustiounit = nulo; Provente de doble resultado estático privado = 0; Valores dobles privados Pacial = nulo; cadena privada noununitratio = null; Dicominputstream privado Dis; Private static final char [] hex_digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; DicomEncodingOngions privado encopts = dicomencodingOptions.default; privado static elementDictionary dict = elementDictionary.getStandardElementDictionary (); public displaytag (archivo de archivo) {try {setObject (loadDicomObject (archivo)); } catch (ioException ex) {logger.getLogger (displaytag.class.getName ()). log (nivel.severe, null, ex); }} / ** * Leer metadatos de DICOM 3.0 * @param f: archivo de entrada * @return atributos * @throws ioexception * / public static atributes loadDicomObject (archivo f) lanza ioexception {if (f == null) {return null; } else {DicominputStream dis = new DicomInputStream (f); //attr.setspecificCharActerSet("gbk "); return dis.readDataSet (-1, -1); }} / ** * Pon attribut * @param obj * / public void setObject (atributes obj) {this.obj = obj; } / ** * Atributo de donación de metadatos * @return * / public static atributes getObject () {return obj; } / ** * Muestra metadatos * @param archivo: archivo inout * @throws ioexception * / public string readtagdicom (archivo archivo) lanza ioexception {din = new DicomInputStream (archivo); objeto = din.readFileMetaAnformation (); Valor de cadena = Object.ToString (); objeto = din.ReadDataSet (-1, -1); valor de retorno; } / ** * PERMET D'AfFICHER L'HEURE D'UNE VALEUR DICOM EN ESTÁNTER Internacional aaaaaaa.mm.dd / Permiso Tiempo de visualización en formato aaaaaaaaaaaaaonesa * aaa yyyy.mm.dd else dd.mm.yyyyyy * @param valuenoun: "dot" Mettre la fecha en formato yyyyy.mm.dd ou dd.mm.yyyyyyyy sinon en format yyyy mm dd ou dd mm yyyyy/ "dot" Put yyyy.mm.dd o dd.mm.mm.dd o ddd o ddd o ddd dd.mm.yyyyyy de lo contrario yyyy mm o dd mm yyyyy * @return afhicher le string du tag selon le standard/ return string date * @throws ioexception */ public string dicomDate (int tag, boolean valleBool, string valuenoun) lanza ioexception {if (getObject (). contiene (etiqueta) getObject (). getString (etiqueta); String tagDayFomat = FormatDate (TagValue, valueBool, Valuenoun); Return TagDayFomat; } else {return null; }}/ ** * Permet d'Afficher l'eure d'une valeur dicom en estándar internacional yyyy.mm.dd/ permiso Mostrar una hora en metadatos para yyyyy.mm.dd * @param objeto * @param etiqueta: valeur du etiqueta/ valor de etiqueta * @param valuebool: si real format yyyy.mm.dd sinonon Si el verdadero formato aaaa yyyy.mm.dd else dd.mm.yyyyy * @param valuenoun: "dot" Mettre la fecha en formato aaa dd.mm.yyyy más yyyy mm o dd mm yyyy * @return afhicher le string du tag selon le estándar/ return string fecha * @throws ioexception */ public static string dicomDate (atributos objeto, int etiqueta, boolean ejeanean valueNouneN) lanza ioexception {string tagValue = objeto. FormatDate (TagValue, ValueBool, Valuenoun); más en formato yyyy mm dd o dd mm yyyyy *@return */public static String FormatDate (String Numero, Boolean ValueBool, String Valuenoun) {if (numero.matches ("^[0-9] *$") {// si la cadena de Caractre est un nombre ou un chiffre r = new striet () (); == true) {// format yyyy.mm.dd para (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 ('.'); Siguiente en el índice uno, y así sucesivamente, en cuanto a la indexación de matriz. GetHeaderDateValue (String tagnr) {return getheaderDateValue (TotAgInt (tagnr)); La representación de cadena de un número de encabezado * por ejemplo, 0008,0010 al número entero correspondiente como 0x00080010 * como se usa en @see org.dcm4che2.data.tag * @param headernr eg 0008,0010 * @return 0x00080010 como int */ público estatic int Integer.ParseInt (headernr.replaceAll (",", ""), 16); Etiqueta de vr = da * @param tagnr: "0000,0010" * @param dicomobj * @return */ public date getheaderDateValue (string tagnr, atributas dicomobj) {return getheaderDateValue (totagint (tagnr), dicomobj); static string textDicom (String num) {num = num.replaceAll ("//^+", ""); Tabla en la lista a cadena TagValue = Arrays.aslist (TagValue2) .ToString (); Object.getStrings (TAG) ;/ Tabla de conversión en la lista de cadena TagValue = DisplayTag.ArrayToString (TagValue2, "//"); separador) {StringBuffer Result = new StringBuffer (); (0008,0030) en el tiempo de estudio S * (0008,0031) en el tiempo de la serie S * (0008,0032) en el tiempo de adquisición S * (0008,0033) en el tiempo de imagen de S * @param etiqueta: etiqueta * @return * @throws ioexception */ public string dicomtime (int etiqueta) tira ioexception {if (getObject (). TagValue = GetObject (). GetString (TAG); (0008,0031) en el tiempo de la serie S * (0008,0032) en el tiempo de adquisición * (0008,0033) At s imagen de imagen * @param etiqueta: dar etiqueta * @return * @throws ioexception */ public string dicomtimeToTal (int etiqueta) lanza ioexception {if (getObject (). Contiene (etiquet getObject (). GetString (etiqueta); (0008,0033) At s Time * @param Object: metadata * @param etiqueta: valor dicom * @return string de valor * @throws ioexception */ public string dicomtime2 (atributas objeto, int) lanza ioexception {string tagValue = object.getString (tag); System.out.println (Formattime (TagValUnotDot); (0008,0033) At S Time * @Param Object: Metadata * @param Etiqueta: Valor DiCom * @return New Value String * @throws ioException * / public String DicomTime3 (Atributes Object, int tag) tira ioexception {string tagValue = object.getString (tag); Lee un valor int del DicomHeader * @param Tagnr la etiqueta para leer * @return el valor como int * / public int getHeaderIntegerValue (int tagnr) {return getObject (). getInt (tagnr, 0); "0008,0102#0054,0220" para obtener el designador del esquema de codificación después de ver la secuencia del código * @return int */ public int getherIntegervalue (String tagnr) {return getHeaderIntegeGervalue (Totagint (Tagnr)); contenerSheaderTag (String tagnr) {return contreSheaderTag (Totagint (tagnr)); public static string getheadername (int tagnr) {return dict.keywalof (tagnr); } / ** * Devuelve la representación de la cadena del campo de encabezado dado * si existe en el encabezado * @param tagnr * @return * / public String getheader (int tagnr) {try {string dcmele = getObject (). ToelementString (String DCMele, int Tag) {StringBuffer sb = new StringBuffer (); .Append (dcmele); Integer correspondiente como 0x00080010 * como se usa en @see org.dcm4che2.data.tag * @param headernr eg 0008,0010 * @return 0x00080010 como int * / public static int totagint2 (string headernr) {return integer.parseint (hewernr.replaceall (",", "", ")," Return integer coma en cadena * @param num * @return */public static string formatNotDot (string num) {num = num.trim (). replaceall ("[^0-9 ///+]", "") static string formattime (string numero) {if (numero.matches ("^[0-9]*$")) {StringBuilder r = new StringBuilder (); }} return r.ToString (); 0, j = numero.length (); i <j; valor */público doble (doble a, int n) {doble p = math.pow (10.0, n); ResultFactorDix = Math.Pow (resultado3, factor); dcmobj.getInts (tag.pixelData); @return * @throws ioexception */ public byte [] LatTricePixElDatabytes (Attributes DCMOBJ) arroja ioexception {byte [] data = dcmobj.getbytes (tag.pixelData); LATTRICEPIXELDATABYTES2 () lanza IOException {byte [] data = getObject (). Raster.gethEight (); = Raster.getSample (x, y, 0); 0; *FileInputStream FIS = New FileInputStream (FileInput); Paciente_additional_tags) {string [] valor = nueva cadena [paciente_additional_tags.length]; } // System.out.print (valor [0]+"/n"); // SEQ = DCM.GetObject (). GetSequence (TAG); Entrada: archivo de entrada * @param tagSQ: etiqueta vr = sq * @param etiqueta: dentro de vr = sq * @return */ public string tagitem (archivo inputfile, int tagSq, int tag) {string valeString = null seq.get (0); PIXELCOMPONENTOMENTES * * * * * @param Resultado: Value String */Public Void Unit (int tag, String Result) {if (tag == Tag.RegionsPatialFormat) setNounUnit ("Forma de onda (trazas fisiológicas, trazas doppler, ..."); ruptura; caso 3: setnoununit ("espectral (cw o pw doppler"); ruptura; caso 2: this.setNounit ("M-Mode (Tissue o Flow)"); Break; case 1: this.setNounit ("2D (Tissue o Flow"); o no aplicable "); break; default: break;}} else if (tag == tag.regionDatatype) {val2 = integer.valueOf (resultado) .intvalue (); // convertie en int switch (val2) {case 12: setnounit (" Orthertheryological (amplitud vs.); Break; this.setNounit (Doppler this.setNounit (Ninguno o no aplicado "); bar"); break; case "E": this.setNounUnit("Color bar"); break; case "F": this.setNounUnit("Integrated Backscatter"); break; default: return; } }else if (TAG == Tag.PhysicalUnitsXDirection || TAG == Tag.PhysicalUnitsXDirection || TAG == Tag.PixelComponentPhysicalUnits){ val2= Integer.ValueOf (resultado). this.setNounit (DB*Pixel/Seconds "); this.setNounit (porcentaje/pixel "); "C": this.setNounUnit ("Degrees"); Backscatter "); br akeak; Caso 7: setnoununit (" barra de color "); ruptura; caso 6: this.setNoununit (" barra gris "); ruptura; caso 5: this.setNounUnit (" intensidad de flujo de color "); ruptura; caso 4: setnounit (" varianza de flujo de color "); break; case 3: this.setNeNUnunit (" Velocidad de flujo de color "); this.setNounit (Spectral Doppler "); aplicable ");}}/** * enregistre l'Inité des elementos/poner la unidad de elementos * @param noununit * @return this.noununit = noununit */public string setNounit (string noununit) {return this.nounit = noununit;}/** * en Obient l'Inité desénsems./giving desanity de la desesidad de la universidad de los elementos * */ public String getNounUnit () {return noununit; UnitRatioSpacial (intt, tag, string dulte) {if (tag == tag.physicalUnitsxdirection || tag == tag.physicalUnitsyDirection || tag == tag.pixelComponentPhySicalUnits) {val2 = Integer.ValueOf (resultado) .IntValue (); // Convertie en intitch (Val2) {CASE 9: DOBLE1: getValeurTagitemDoUlerAtio ()* setFactEurPuissance (10,1); setFactEurPuissance (10,1); this.setNounInTratio ("Hertz/Pixel"); this.setNounUnitratio ("DB/Pixel"); setFactEurPuissance (10,2); settagitemDoublerAtio (ValuesPatial4); // Prend la Valeur. @return */ public settagitemdoupleratio (Double ValuesPatial) {return this.valuSpatial = ValuesPatial; potencia informática * @param result3 * @param facteur * @return * @return */ public static setFactEurPuissance (doble resultado3, doble FactEur) {return dateFactEurdix = Math.Pow (result3, Facteur); ResultFacteurDix; des items./giving Unity items * @return le nom de l'Inité */ public String getNounUnitratio () {return nounUnitratio; }/ ** * Prend la Valeur interan d'un etiqueta elemento/ put etiqueta elemento * @param resultado * @return */ public string settagitem (resultado de cadena) {return this.result = resultado; }/** * Donne La Valeur du Tag Rachercher/Dando un valor de la etiqueta Seek * @return le String de la Valeur Rachercher du Tag dans unem */public String getValeurtagitem () {return resultado; }/ ** * Prend La Valeur interan d'un etiqueta item/ Pon la etiqueta de valor itemù * @return */ public doble settagitemDouble (doble resultado2) {return this.result2 = result2; }/** * Donne La Valeur du Tag Rachercher/Dando la etiqueta de valor * @return le doble de la valeur rachercher du etiqueta dans un elemento */public Double getValeurtagitemDouble () {return resultado2; } / ** * lee un valor de cadena de la etiqueta dicom (dcm4che2) * @param tagnr la etiqueta para leer * @return el valor como cadena * Devuelve el conjunto de caracteres específico definido por un conjunto de caracteres específico de atributo (0008,0005) * de esto o el conjunto de datos raíz, si este es un conjunto de datos inestable contenimiento en una secuencia de secuencia * / public string getheaderstringvalue (intent {taguts taguts {tagutes {tagutes {Tagutes {tagutes {tagutes {Tagutes {Tagutes { elem = getObject (); elem.setspecificCharActerSet ("GB18030"); Cadena val = elem.getString (tagnr); if (val == null) {val = ""; } return val; } catch (Exception e) {return ""; }} / ** * lee un valor de cadena de la etiqueta Dicom (dcm4che2) * @param tagnr la etiqueta para leer * @return el valor como cadena * Devuelve el conjunto de caracteres específico definido por un conjunto de caracteres específico de atributo (0008,0005) * de esto o el conjunto de datos raíz, si este es un conjunto de datos anidado que contiene en una secuencia de secuencia elementa de * / public String [] [] getheaderstringvalues (intencione (intenta {intenta tag) System.out.println (222); Atributos elem = getObject (); elem.setspecificCharActerSet ("GB18030"); Cadena [] val = elem.getStrings (tagnr); devolver val; } capt (excepción e) {return null; }} / ** * lee un valor de cadena del Dicomheader * @param etiqueta la etiqueta para leer * @param dcmelement * @return el valor como cadena * / public String getheaderStringValue (atributas dcmelement, int tagnr) {try {system.println (333); /* dcmelement.setspecificCharActerSet ("iso_ir 100"); */ dcmelement.setspecificCharActerSet ("GB18030"); Cadena val = dcmelement.getString (tagnr); if (val == null) {val = ""; } return val; } catch (Exception e) {return ""; }} / ** * lee la etiqueta (grupo, elemento) * @param headernr eg "0018,0050" para obtener grosor de corte <br> * @return string * / public string getheaderStringValue (String headernr) {headernr = headernr.replaceAll ("xx", "00"). ReplaceAll ("xx", "00", "00"); return getHeaderstringValue (Totagint (Headernr)); } / ** * dando tiempo una etiqueta ("xxxx,") * @param tagnr * @return * / public time getheadtertimeValue (string tagnr) {return getHeaderTimeValue (Totagint (tagnr)); } / ** * Dando tiempo una etiqueta * @param tagnr * @return time * / public time getheadtertimeValue (int tagnr) {string time = getHeaderStringValue (tagnr); if (time.length ()! = 6) {return null; } try {int hour = integer.parseInt (time.substring (0,2)); int min = integer.ParseInt (Time.substring (2,4)); int Sec = Integer.ParseInt (Time.substring (4,6)); regresar nuevo tiempo (hora, min, sec); } catch (excepción e) {} return null; } /** * Recupera un cabezal específico que está dentro de la etiqueta Anotehr * o "0008,0102, 0054,0220" para obtener el diseñador de esquema de codificación después de ver la secuencia de código * @return * * @param tagherarchy; Eg {tag.uid, tag.sopinstanceUid, tag.codeMeaning} * @return */ public string getHeaderDEnsidEtAg (int [] taghierarchy) {try {for (int i = 0; i <tagherarchy.length-1; i ++) {return getObject (). }} capt (excepción e) {string tags = ""; for (int i = 0; i <tagherarchy.length; i ++) {tags += totagString (tagherarchy [i]) +""; } devolver ""; } return null; } / ** * Convierte la representación int de un número de encabezado * por ejemplo, 0x00080010 a la cadena correspondiente 0008,0010 * @return 0008,0010 como cadena * / public static String TotAgString (int tagnr) {return shotToHex (tagnr >> 16) + ', + shortToHex (tagnr); } public static string shorttoHex (int val) {char [] ch = new Char [4]; shorttoHex (val, ch, 0); devolver nueva cadena (ch); } public static stringbuffer shorttoHex (int val, stringbuffer sb) {sb.append (hex_digits [(val >> 12) y 0xf]); sb.append (hex_digits [(val >> 8) y 0xf]); sb.append (hex_digits [(val >> 4) y 0xf]); sb.append (hex_digits [val & 0xf]); regresar SB; } public static void shorttoHex (int val, char [] ch, int off) {ch [off] = hex_digits [(val >> 12) y 0xf]; ch [apagado+1] = hex_digits [(val >> 8) y 0xf]; CH [OFF+2] = hex_digits [(val >> 4) y 0xf]; CH [OFF+3] = hex_digits [val & 0xf]; } / ** * Crear salida de archivo DICOM * @param FileOutput: salida de archivo * @throws ioException * * * Ejemplo: * * * * * * / public void writeTo (archivo fileOutput, atributas fmi, atributes objeto) lanza ioexception {dicomoutputStream dos = new diCoMoutput (nuevo archivo (archivo +"". Dcm ". DcM". dos.setEncodingOptions (encopts); dos.WritedataSet (FMI, objeto); dos.finish (); dos.flush (); } / ** * escritura * @param fileoutput * @param h * @param w * @throws ioexception * / public void writeSegment (archivo fileoutput, int h, int w) lanza ioexception {dicomoutputStream dos = new DicomoutputStream (nuevo archivo (fileOutput +". DCM")); dos.setEncodingOptions (encopts); } / ** * Crear superposición en PixelData * @param objeto * / public void OverlayCreate (objeto de atributos) {int posicion = object.getInt (tag.overlayBitPosition, 0); if (posición == 0) {return; } int bit = 1 << posición; int [] pixels = object.getInts (tag.pixelData); int count = 0; for (int pix: pixels) {int overlay = pix & bit; píxeles [count ++] = Pix - superpuesto; } objeto.setInt (tag.pixelData, vr.ow, píxeles); } /*** Dicom.SetString (Tag.PerformingPhySicianName, VR.PN, "Jean"); Dicom.setstring (etiqueta. Admitirdiagnossdescription, vr.lo, "chu"); Secuencia SEQ = Dicom.neweSequence (TAG.AnatomicRregionSequence, 0); Atributos dicom2 = new Attributes (); * @param dicom */ public void setItem (atributes DICOM, int tagSequenceName) {secuence 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, "ojo"); Seq.Add (DICOM); } public static void main (string [] args) lanza excepción {archivo archivo = nuevo archivo ("c: // uss // fendo // documents // wechat files // fen_do // archivos // 1234.dcm"); DisplayTag d = new DisplayTag (archivo); @SupessWarnings ("static-access") atributos attrs = d.loadDicomObject (archivo); // emitir toda la información de atributo System.out.println ("Toda la información:" + attrs); // get fila int row = attrs.getInt (tag.rows, 1); // obtener columna int columna = attrs.getInt (tag.columns, 1); // Ventana de ancho Window float win_center = attrs.getfloat (tag.windowcenter, 1); float win_width = attrs.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缓存操作技巧汇总》
Espero que este artículo sea útil para la programación Java de todos.