dcmicmp(1) OFFIS DCMTK dcmicmp(1)

dcmicmp - مقایسه تصاویر DICOM و محاسبه معیارهای تفاوت

dcmicmp [options] dcmfile-in-1 dcmfile-in-2

ابزار dcmicmp دو تصویر DICOM را می‌خواند؛ یک «تصویر مرجع» اصلی و یک «تصویر آزمون» پس‌پردازش‌شده که نوعی پردازش مانند فشرده‌سازی با اتلاف تصویر و به دنبال آن فشرده‌گشایی بر روی آن اعمال شده است. این ابزار مستلزم آن است که هر دو تصویر دارای تفکیک‌پذیری یکسان، تعداد فریم‌های یکسان و هر دو رنگی یا تک‌رنگ باشند. تصاویر فشرده‌شده پشتیبانی نمی‌شوند.

سپس ابزار dcmicmp هر دو تصویر را با یکدیگر مقایسه کرده و معیارهایی را که نشان‌دهنده میزان شباهت یا تفاوت آن‌ها است محاسبه و چاپ می‌کند:

  • حداکثر خطای مطلق (maximum absolute error) بیشترین اختلاف بین مقدار یک پیکسل در تصویر مرجع و مقدار پیکسل متناظر آن در تصویر آزمون است.
  • میانگین خطای مطلق (MAE) میانگین اختلاف بین مقدار پیکسل اصلی و مقدار پیکسل تصویر آزمون است.
  • جذر میانگین مربعات خطا (RMSE) از طریق جمع کردن مجذور تمام مقادیر اختلاف، تقسیم آن بر تعداد مقادیر جمع‌شده و سپس محاسبه جذر آن به دست می‌آید.
  • نسبت بیشینه سیگنال به نویز (PSNR) تصویر مرجع را به عنوان سیگنال و تفاوت‌های بین تصویر مرجع و آزمون را به عنوان نویز در نظر می‌گیرد. مقدار PSNR برابر است با بیشینه توان سیگنال (یعنی حداکثر مقدار پیکسل در تصویر مرجع) تقسیم بر RMSE، که در مقیاس لگاریتمی بر حسب dB بیان می‌شود.
  • نسبت سیگنال به نویز (SNR) نیز تصویر مرجع را به عنوان سیگنال و تفاوت‌های بین تصویر مرجع و آزمون را به عنوان نویز در نظر می‌گیرد. مقدار SNR برابر است با میانگین توان سیگنال تقسیم بر RMSE، که در مقیاس لگاریتمی بر حسب dB بیان می‌شود.

تمام معیارها مطابق با تعاریف ارائه‌شده در کتاب «پردازش تصویر دیجیتال» نوشته R.C. Gonzalez و R.E. Woods، انتشارات Prentice Hall سال ۲۰۰۸ محاسبه می‌شوند.

dcmfile-in-1  فایل تصویر مرجع DICOM برای مقایسه
dcmfile-in-2  فایل تصویر آزمون DICOM برای مقایسه ("-" برای stdin)

-h    --help
        چاپ این متن راهنما و خروج
      --version
        چاپ اطلاعات نسخه و خروج
      --arguments
        چاپ آرگومان‌های بسط‌یافته خط فرمان
-q    --quiet
        حالت بی‌صدا، عدم چاپ هشدارها و خطاها
-v    --verbose
        حالت پرگو، چاپ جزئیات پردازش
-d    --debug
        حالت اشکال‌زدایی، چاپ اطلاعات اشکال‌زدایی
-ll   --log-level  [l]evel: string constant
        (fatal, error, warn, info, debug, trace)
        استفاده از سطح l برای logger
-lc   --log-config  [f]ilename: string
        استفاده از فایل پیکربندی f برای logger

قالب فایل ورودی:
  +f    --read-file
          خواندن قالب فایل یا مجموعه داده (پیش‌فرض)
  +fo   --read-file-only
          فقط خواندن قالب فایل
  -f    --read-dataset
          خواندن مجموعه داده بدون اطلاعات فراداده‌ای فایل
سینتکس انتقال ورودی:
  -t=   --read-xfer-auto
          استفاده از تشخیص خودکار TS (پیش‌فرض)
  -td   --read-xfer-detect
          نادیده گرفتن TS مشخص‌شده در سرآیند فراداده فایل
  -te   --read-xfer-little
          خواندن با TS از نوع explicit VR little endian
  -tb   --read-xfer-big
          خواندن با TS از نوع explicit VR big endian
  -ti   --read-xfer-implicit
          خواندن با TS از نوع implicit VR little endian
تبدیل modality LUT:
  +M    --use-modality
          استفاده از تبدیل modality LUT (پیش‌فرض)
  -M    --no-modality
          نادیده‌گرفتن تبدیل modality LUT ذخیره‌شده
تبدیل VOI LUT:
  -W    --no-windowing
          بدون پنجره‌بندی VOI (پیش‌فرض)
  +Wi   --use-window  [n]umber: integer
          استفاده از n-امین پنجرهٔ VOI از فایل تصویر
  +Wl   --use-voi-lut  [n]umber: integer
          استفاده از n-امین جدول تبدیل (look up table) VOI از فایل تصویر
  +Wm   --min-max-window
          محاسبهٔ پنجرهٔ VOI با استفاده از الگوریتم min-max
          به‌طور جداگانه روی هر دو تصویر
  +Wn   --min-max-window-n
          محاسبهٔ پنجرهٔ VOI با استفاده از الگوریتم min-max
          به‌طور جداگانه روی هر دو تصویر، با نادیده‌گرفتن مقادیر حدی
  +Wr   --min-max-ref
          محاسبهٔ پنجرهٔ VOI با استفاده از الگوریتم min-max
          و استفاده از همان پنجره برای تصویر آزمایشی
  +Wq   --min-max-n-ref
          محاسبهٔ پنجرهٔ VOI با استفاده از الگوریتم min-max،
          با نادیده‌گرفتن مقادیر حدی
          و استفاده از همان پنجره برای تصویر آزمایشی
  +Ww   --set-window  [c]enter [w]idth: float
          محاسبهٔ پنجرهٔ VOI با استفاده از مرکز c و پهنای w
  +Wfl  --linear-function
          تنظیم تابع VOI LUT روی LINEAR
  +Wfs  --sigmoid-function
          تنظیم تابع VOI LUT روی SIGMOID
تبدیل presentation LUT:
  +Pid  --identity-shape
          تنظیم شکل presentation LUT روی IDENTITY
  +Piv  --inverse-shape
          تنظیم شکل presentation LUT روی INVERSE
  +Pod  --lin-od-shape
          تنظیم شکل presentation LUT روی LIN OD

+ce   --check-error  [l]imit: integer
        بررسی این‌که آیا حداکثر خطای مطلق <= limit است
# در صورتی که حداکثر خطای مطلق محاسبه‌شده بزرگ‌تر از حد تعیین‌شده باشد،
# کد خروج EXITCODE_LIMIT_EXCEEDED_MAX_ERROR برگردانده می‌شود.
+cm   --check-mae  [l]imit: float
        بررسی این‌که آیا میانگین خطای مطلق <= limit است
# در صورتی که میانگین خطای مطلق محاسبه‌شده بزرگ‌تر از حد تعیین‌شده باشد،
# کد خروج EXITCODE_LIMIT_EXCEEDED_MAE برگردانده می‌شود.
+cr   --check-rmse  [l]imit: float
        بررسی این‌که آیا ریشهٔ میانگین مربعات خطا <= limit است
# در صورتی که ریشهٔ میانگین مربعات خطای محاسبه‌شده بزرگ‌تر از حد تعیین‌شده باشد،
# کد خروج EXITCODE_LIMIT_EXCEEDED_RMSE برگردانده می‌شود.
+cp   --check-psnr  [l]imit: float
        بررسی این‌که آیا PSNR >= limit است
# در صورتی که نسبت بیشینه سیگنال به نویز (PSNR) محاسبه‌شده کمتر از حد تعیین‌شده باشد،
# کد خروج EXITCODE_LIMIT_EXCEEDED_PSNR برگردانده می‌شود
# (برای PSNR، مقادیر بالاتر به معنای کیفیت بهتر تصویر است)
+cs   --check-snr  [l]imit: float
        بررسی این‌که آیا SNR >= limit است
# در صورتی که نسبت سیگنال به نویز محاسبه‌شده کمتر از حد تعیین‌شده باشد،
# کد خروج EXITCODE_LIMIT_EXCEEDED_PSNR برگردانده می‌شود
# (برای SNR، مقادیر بالاتر به معنای کیفیت بهتر تصویر است)
+sd   --save-diff  [f]ilename: string
        نوشتن تصویر تفاضلی secondary capture
# ایجاد یک تصویر Multiframe Secondary Capture که شامل یک تصویر تفاضلی بین
# تصویر مرجع و آزمون است. برای تصاویر تک‌رنگ (monochrome)، یک فریم تفاضلی
# به ازای هر فریم در تصویر مرجع ایجاد می‌شود. برای تصاویر رنگی، سه فریم
# تک‌رنگ به ازای هر فریم در تصویر مرجع ایجاد می‌شود که متناظر با تفاوت‌ها در
# صفحات رنگی قرمز، سبز و آبی هستند. تصویر تفاضلی بر اساس ویژگی‌های تصویر
# مرجع، دارای BitsStored برابر با ۸ یا ۱۶ خواهد بود.
+a    --amplify  [f]actor: float
        ضرب مقادیر پیکسل تصویر تفاضلی در f
# این گزینه می‌تواند برای تقویت مقادیر مقیاس خاکستری (grayscale) در تصویر
# تفاضلی از طریق ضرب هر مقدار در ضریب داده‌شده استفاده شود. به عنوان
# روش جایگزین، ممکن است هنگام مصورسازی تصویر تفاضلی از یک پنجره DICOM VOI LUT
# استفاده شود.

تصاویر تک‌رنگ DICOM نیازمند اجرای یک خط لوله نمایش چندمرحله‌ای هستند تا مقادیر خام پیکسل به مقادیر موسوم به مقادیر ارائه (p-values) که به نمایشگر (احتمالاً کالیبره‌شده) ارسال می‌شوند تبدیل گردند. هنگام مقایسه شباهت تصاویر پیش و پس از پس‌پردازش، فعال‌سازی برخی از مراحل این خط لوله نمایش پیش از محاسبه تصویر تفاضلی و معیارها می‌تواند سودمند باشد. گزینه‌های پردازش تصویر به فراخواننده اجازه می‌دهند تبدیلات Modality LUT، VOI LUT و Presentation LUT را فعال یا غیرفعال کند. در هر صورت، تبدیل یکسانی بر روی هر دو تصویر اعمال می‌شود، اگرچه ممکن است با پارامترهای متفاوت باشد؛ برای مثال اگر «اولین پنجره VOI LUT» ذخیره‌شده در هر تصویر اعمال گردد. این امر با این فرض صورت می‌گیرد که الگوریتم پس‌پردازش (مانند الگوریتم فشرده‌سازی) مقادیر چنین پنجره‌هایی را در حین فشرده‌سازی به‌گونه‌ای تطبیق داده است که نمایش تصویر پس از اعمال پنجره تا حد ممکن به مرجع نزدیک باشد. برای تصاویر با بیش از ۸ بیت در هر نمونه (bits/sample) ممکن است دانستن اینکه کدام تبدیل VOI LUT توسط کاربر هنگام مشاهده تصویر اعمال می‌شود اهمیت داشته باشد، زیرا این موضوع می‌تواند بر کیفیت ادراک‌شده تصویر اثر بگذارد. بنابراین، پارامترهای مطلق Window را نیز می‌توان با گزینه --set-window مشخص کرد که متعاقباً بر روی هر دو تصویر اعمال خواهند شد.

کاربر همچنین باید توجه داشته باشد که معیارهای محاسبه‌شده توسط این ابزار نمی‌توانند مناسب بودن تصویر فشرده‌شده با اتلاف (lossy) را برای اهداف تشخیصی پیش‌بینی یا برآورد کنند. برای این منظور، پردازش تصویر بسیار پیچیده‌تر و درک محتوای تصویر (مانند اندام یا عضو بدن) مورد نیاز خواهد بود. معیارهای محاسبه‌شده صرفاً تخمینی از میزان اعوجاج ناشی از پس‌پردازش ارائه می‌دهند - نه بیشتر و نه کمتر.

dcmicmp از ساختارهای انتقال (transfer syntaxes) زیر برای ورودی پشتیبانی می‌کند:

LittleEndianImplicitTransferSyntax             1.2.840.10008.1.2
LittleEndianExplicitTransferSyntax             1.2.840.10008.1.2.1
DeflatedExplicitVRLittleEndianTransferSyntax   1.2.840.10008.1.2.1.99 (*)
BigEndianExplicitTransferSyntax                1.2.840.10008.1.2.2

فایل تصویر تفاضلی همواره با ساختار Little Endian Implicit Transfer Syntax نوشته می‌شود.

(*) در صورتی که با فعال بودن پشتیبانی از zlib کامپایل شده باشد

سطح خروجی گزارش‌گیری (logging) ابزارهای خط فرمان مختلف و کتابخانه‌های زیربنایی می‌تواند توسط کاربر مشخص شود. به طور پیش‌فرض، تنها خطاها و هشدارها در جریان خطای استاندارد (standard error) نوشته می‌شوند. با استفاده از گزینه --verbose پیام‌های اطلاع‌رسانی مانند جزئیات پردازش نیز گزارش می‌شوند. گزینه --debug می‌تواند برای دریافت جزئیات بیشتر درباره فعالیت‌های داخلی، به عنوان مثال برای اهداف اشکال‌زدایی، به کار رود. سایر سطوح گزارش‌گیری را می‌توان با استفاده از گزینه --log-level انتخاب کرد. در حالت --quiet فقط خطاهای مهلک گزارش می‌شوند. در چنین رخدادهای خطای بسیار شدیدی، برنامه معمولاً خاتمه می‌یابد. برای جزئیات بیشتر در مورد سطوح مختلف گزارش‌گیری، به مستندات ماژول «oflog» مراجعه کنید.

در صورتی که خروجی گزارش‌گیری باید در یک فایل نوشته شود (اختیاراً همراه با چرخش فایل گزارش یا همان logfile rotation)، یا به syslog (یونیکس) یا event log (ویندوز) ارسال گردد، می‌توان از گزینه --log-config استفاده کرد. این فایل پیکربندی همچنین امکان هدایت پیام‌های مشخصی به یک جریان خروجی معین و فیلتر کردن پیام‌ها بر اساس ماژول یا برنامه‌ای که در آن ایجاد شده‌اند را فراهم می‌کند. یک نمونه فایل پیکربندی در مسیر <etcdir>/logger.cfg ارائه شده است.

تمامی ابزارهای خط فرمان از شیوه نمادگذاری زیر برای پارامترها استفاده می‌کنند: کروشه‌ها مقادیر اختیاری (۰-۱) را در بر می‌گیرند، سه نقطه در انتها نشان‌دهنده مجاز بودن چندین مقدار (۱-n) است، و ترکیبی از هر دو به معنای ۰ تا n مقدار می‌باشد.

گزینه‌های خط فرمان به ترتیب با یک علامت «+» یا «-» پیشرو از پارامترها متمایز می‌شوند. معمولاً ترتیب و موقعیت گزینه‌های خط فرمان اختیاری است (یعنی می‌توانند در هر جایی ظاهر شوند). با این حال، اگر گزینه‌ها ناسازگار با یکدیگر (mutually exclusive) باشند، آخرین نمونه در سمت راست اعمال می‌شود. این رفتار با قواعد ارزیابی استاندارد در شل‌های متداول یونیکس سازگار است.

علاوه بر این، یک یا چند فایل فرمان را می‌توان با استفاده از علامت «@» به عنوان پیشوند نام فایل مشخص کرد (مانند @command.txt). چنین آرگومان فرمانی پیش از هرگونه پردازش بیشتر، با محتوای فایل متنی متناظر جایگزین می‌شود (فاصله‌های خالی متعدد به عنوان یک جداکننده واحد در نظر گرفته می‌شوند مگر اینکه بین دو علامت نقل‌قول قرار گرفته باشند). لطفاً توجه داشته باشید که یک فایل فرمان نمی‌تواند حاوی فایل فرمان دیگری باشد.

ابزار dcmicmp هنگام خاتمه از کدهای خروج زیر استفاده می‌کند. این به کاربر امکان می‌دهد تا دلیل پایان کار برنامه را بررسی کند.

EXITCODE_NO_ERROR                         0
EXITCODE_COMMANDLINE_SYNTAX_ERROR         1

EXITCODE_INVALID_INPUT_FILE              22
EXITCODE_CANNOT_WRITE_OUTPUT_FILE        40
EXITCODE_INITIALIZE_DIFF_IMAGE           80
EXITCODE_DISPLAY_PIPELINE                81
EXITCODE_IMAGE_COMPARISON                82

EXITCODE_LIMIT_EXCEEDED_MAX_ERROR        90
EXITCODE_LIMIT_EXCEEDED_MAE              91
EXITCODE_LIMIT_EXCEEDED_RMSE             92
EXITCODE_LIMIT_EXCEEDED_PSNR             93
EXITCODE_LIMIT_EXCEEDED_SNR              94

ابزار dcmicmp تلاش خواهد کرد دیکشنری‌های داده DICOM مشخص‌شده در متغیر محیطی DCMDICTPATH را بارگذاری کند. به‌طور پیش‌فرض، یعنی در صورتی که متغیر محیطی DCMDICTPATH مقداردهی نشده باشد، فایل <datadir>/dicom.dic بارگذاری خواهد شد، مگر اینکه دیکشنری درون خود برنامه تعبیه شده باشد (پیش‌فرض در ویندوز).

رفتار پیش‌فرض ارجح است و متغیر محیطی DCMDICTPATH تنها باید در صورتی استفاده شود که به دیکشنری‌های داده جایگزین نیاز باشد. ساختار متغیر محیطی DCMDICTPATH مانند متغیر PATH در شل یونیکس است و از دو‌نقطه (":") برای جداسازی ورودی‌ها استفاده می‌کند. در سیستم‌های ویندوز، از نقطه-ویرگول (";") به‌عنوان جداکننده استفاده می‌شود. کد دیکشنری داده تلاش خواهد کرد هر فایل مشخص‌شده در متغیر محیطی DCMDICTPATH را بارگذاری کند. بارگذاری نشدن هیچ‌یک از دیکشنری‌های داده خطا محسوب می‌شود.

dcm2pnm(1)

حق نشر (C) 2018-2025 توسط OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.

Thu Jul 9 2026 18:43:40 Version 3.7.0