首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Multimedia DICOM 實戰:建立醫學影像表、匯入與屬性提取

     編輯:Oracle 資料庫基礎

前言:資料庫原生管理醫學影像

Oracle Multimedia(舊稱 interMedia)提供 ORDDicom、ORDImage 等原生物件型別,讓 DICOM 醫學影像與中繼資料能像關係資料一樣在資料庫中儲存、索引、查詢、處理。本文以完整範例示範:建立醫學影像表、定義 PL/SQL 匯入程序、自動提取 DICOM 標籤至 XML 中繼資料。

一、建立醫學影像表

CREATE TABLE medical_image_table (
  id          INTEGER PRIMARY KEY,
  dicom       ORDSYS.ORDDicom,      -- 原始 DICOM 物件
  imageThumb  ORDSYS.ORDImage,      -- 縮圖(JPEG/PNG)
  anonDicom   ORDSYS.ORDDicom       -- 去識別化後 DICOM
) TABLESPACE users;

關鍵點:所有 Multimedia 物件型別定義於 ORDSYS Schema,授權模式為 Oracle Database Enterprise Edition 選項。

二、初始化資料模型資料庫

任何 DICOM 操作前,必須在 Session 中載入資料模型:

EXEC ORDSYS.ORD_DICOM.setDataModel();

此呼叫將標準 DICOM 資料字典、對應文檔、約束定義載入記憶體,建議在應用啟動或連接池初始化時執行一次。

三、建立 DICOM 匯入預存程序

CREATE OR REPLACE PROCEDURE image_import (
  p_dest_id  IN NUMBER,
  p_filename IN VARCHAR2
) AS
  v_dcm ORDSYS.ORDDicom;
BEGIN
  -- 1. 刪除同 ID 舊資料(冪等)
  DELETE FROM medical_image_table WHERE id = p_dest_id;

  -- 2. 插入新列,ORDDicom 以 BFILE 參考外部檔案
  INSERT INTO medical_image_table (id, dicom, imageThumb, anonDicom)
  VALUES (
    p_dest_id,
    ORDSYS.ORDDicom('FILE', 'IMAGEDIR', p_filename, 0),  -- 來源:Directory 物件 IMAGEDIR 下的檔案
    ORDSYS.ORDImage.INIT(),                                 -- 空縮圖物件
    ORDSYS.ORDDicom()                                       -- 空去識別化物件
  )
  RETURNING dicom INTO v_dcm;

  -- 3. 將檔案內容載入資料庫(BFILE → BLOB)
  v_dcm.import(1);  -- 1 = 同步模式

  -- 4. 更新含完整 BLOB 的物件
  UPDATE medical_image_table SET dicom = v_dcm WHERE id = p_dest_id;
  COMMIT;
END;
/
SHOW ERRORS;

參數說明

  • 'FILE':來源類型為資料庫 Directory 物件下的檔案。
  • 'IMAGEDIR':預先建立的 Directory 物件(CREATE OR REPLACE DIRECTORY IMAGEDIR AS '/u01/dicom_in';),且執行匯入的用戶需有 READ 權限。
  • p_filename:DICOM 檔名(如 179.dcm)。
  • 0:不自動提取中繼資料(稍後由 import 隱含完成)。

四、執行匯入

BEGIN
  ORDSYS.ORD_DICOM.setDataModel();
  image_import(1, '179.dcm');
END;
/
COMMIT;

五、匯入後自動完成的動作

  1. 像素資料載入:DICOM Pixel Data 寫入 ORDDicom.source.localData (SecureFile BLOB)。
  2. 中繼資料提取:依預設對應文檔 ordcmmp.xml 將 DICOM 標籤轉為 XML 文檔,存於 ORDDicom.metadata。
  3. UID 產生:自動計算 SOP Instance UID、Study/Series UID 等關鍵識別碼。
  4. 格式驗證:檢查 DICOM 結構完整性。

六、進階:自定義中繼資料對應與匿名化

自定義對應文檔

若需提取特定私有標籤或調整 XML 結構,可建立自訂 Mapping Document(參考 ordcmmp.xsd),匯入時指定:

v_dcm.setProperties('CUSTOM_MAP.xml');  -- 在 import 前呼叫

去識別化

DECLARE
  v_src ORDSYS.ORDDicom;
  v_anon ORDSYS.ORDDicom;
BEGIN
  SELECT dicom INTO v_src FROM medical_image_table WHERE id = 1;
  v_anon := v_src.makeAnonymous('ANON_MAP.xml');  -- 依規則移除/偽裝患者資訊
  UPDATE medical_image_table SET anonDicom = v_anon WHERE id = 1;
  COMMIT;
END;
/
-- 縮圖產生
DECLARE
  v_src ORDSYS.ORDDicom;
  v_thumb ORDSYS.ORDImage;
BEGIN
  SELECT dicom, imageThumb INTO v_src, v_thumb FROM medical_image_table WHERE id = 1;
  v_src.processCopy('MAXSCALE=128 128 FILEFORMAT=JPEG', v_thumb);
  UPDATE medical_image_table SET imageThumb = v_thumb WHERE id = 1;
  COMMIT;
END;
/

七、權限與目錄設定清單

-- 建立目錄物件
CREATE OR REPLACE DIRECTORY IMAGEDIR AS '/u01/dicom_in';
GRANT READ ON DIRECTORY IMAGEDIR TO app_user;

-- 匯出目錄(下一篇將使用)
CREATE OR REPLACE DIRECTORY EXPORTDIR AS '/u01/dicom_out';
GRANT READ, WRITE ON DIRECTORY EXPORTDIR TO app_user;

結語

Oracle Multimedia 將 DICOM 視為一等公民資料型別,單一 INSERT 即完成檔案載入、中繼資料提取、UID 索引、格式驗證。配合 ORDImage 產生縮圖、makeAnonymous 去識別化,資料庫即可成為 PACS/VNA 的核心儲存與查詢引擎,消除檔案系統管理的碎片化與一致性風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved