# DICOM व्यूअर — .dcm स्कैन ब्राउज़र में खोलिए

CT, MRI, एक्स-रे और अल्ट्रासाउंड, विंडो, हेडर और नाप के साथ।

> CT, MRI, एक्स-रे और अल्ट्रासाउंड स्कैन अपने ब्राउज़र में खोलिए। विंडो और लेवल, पूरी सीरीज़ पलटना, मिलीमीटर में नापना, हर DICOM टैग पढ़ना, और यह देखना कि फ़ाइल में मरीज़ की पहचान क्या-क्या कराता है। कुछ भी अपलोड नहीं होता।

यह पेज एक इंटरैक्टिव टूल है जो पूरी तरह आपके ब्राउज़र में चलता है, https://abox.tools/hi/dicom-viewer/ पर — आप इसे जो भी देते हैं, वह कहीं अपलोड नहीं होता। आगे वह सब कुछ है जो यह पेज इस टूल के बारे में शब्दों में कहता है; इसे इस्तेमाल करने के लिए यह पता खोलें।

## यह टूल स्कैन **कभी अपलोड नहीं करता**। यहाँ कोई सर्वर है ही नहीं।

स्कैन को खोलना और डीकोड करना, यह सब आपका अपना ब्राउज़र करता है। हेडर, पिक्सल, विंडो, नाप, सब कुछ। इस पेज के दूसरी तरफ़ कोई सर्वर है ही नहीं जिसे मरीज़ की जानकारी भेजी जा सके, चाहे यहाँ की कोई चीज़ भेजना भी चाहे। और इस फ़ाइल के बारे में कुछ भी किसी को नहीं बताया जाता, न मरीज़ का नाम, न जाँच, न फ़ाइल का नाम।

- ✗ कोई अपलोड नहीं
- ✗ कोई अकाउंट नहीं
- ✓ ऑफ़लाइन चलता है
- ✓ ओपन सोर्स
- ✓ फ़ाइलें आपके डिवाइस पर रहती हैं

## DICOM फ़ाइल कैसे खोलें

1. **फ़ाइलें चुनिए।** एक `.dcm` फ़ाइल, या डिस्क का पूरा फ़ोल्डर। CT या MRI में हर स्लाइस की अलग फ़ाइल होती है, इसलिए सबको एक साथ खींचकर डालना ही सीरीज़ को दोबारा जोड़ता है। फ़ाइलें ब्राउज़र सीधे आपकी डिस्क से पढ़ता है, और इस दौरान कुछ भी कहीं नहीं भेजा जाता।
2. **सीरीज़ चुनिए।** एक जाँच में आम तौर पर कई होती हैं, पहले स्काउट और फिर हर अलग शॉट। हर सीरीज़ उसी क्रम में लगती है जिसमें मशीन ने उसे लिया था, और वह क्रम नंबरों से नहीं बल्कि इससे निकलता है कि हर स्लाइस शरीर में कहाँ पड़ती है। नंबर हमेशा एक ही दिशा में नहीं चलते।
3. **विंडो सेट कीजिए।** यही वह चीज़ है जो स्कैन को पढ़ने लायक बनाती है, और यही इमेज एडिटर में नहीं होती। तस्वीर पर आड़ा खींचिए तो विंडो चौड़ी होती है और ऊपर-नीचे खींचिए तो उसका केंद्र सरकता है। CT पर आप नाम वाली विंडो भी चुन सकते हैं, जैसे फेफड़ा, हड्डी, दिमाग, नरम ऊतक, क्योंकि CT की इकाइयाँ दुनिया की हर मशीन पर एक जैसी होती हैं।
4. **स्लाइस पलटिए।** तस्वीर के नीचे वाला स्लाइडर स्लाइस बदलता है, और तस्वीर पर एक बार क्लिक कर देने के बाद तीर की कुंजियाँ भी यही करती हैं। कई फ़्रेम वाली फ़ाइल, जैसे अल्ट्रासाउंड लूप या एंजियोग्राम, बगल के बटन से चलती है।
5. **कुछ नापिए।** नाप पर जाइए और एक रेखा खींचिए। जहाँ फ़ाइल बताती है कि उसके पिक्सल कितनी दूर हैं, वहाँ जवाब मिलीमीटर में आता है और उन पिक्सलों का भी ध्यान रखा जाता है जो वर्गाकार नहीं हैं। जहाँ फ़ाइल यह नहीं बताती, वहाँ जवाब पिक्सल में आता है और साफ़ कह भी दिया जाता है, कोई पैमाना गढ़ा नहीं जाता।
6. **हेडर पढ़िए।** फ़ाइल का हर एलिमेंट, उसके नंबर के साथ, स्टैंडर्ड जिस नाम से उसे बुलाता है उसके साथ, और उसमें जो है उसके साथ, और यह सब खोजा जा सकता है। उसके ऊपर वह सूची है कि इसी फ़ाइल में मरीज़ की पहचान क्या-क्या कराता है, जो नाम से कहीं ज़्यादा है।
7. **जो चाहिए वह ले जाइए।** स्क्रीन पर दिख रही तस्वीर PNG के रूप में, आपकी सेट की हुई विंडो के साथ और उस पर कुछ भी छपा हुए बिना, या फिर पूरा हेडर सादे टेक्स्ट में। दोनों इसी पेज में उसी से बनते हैं जो पहले से यहाँ मौजूद है।

## विस्तार से

[DICOM फ़ाइल कैसे खोलें, और उसमें क्या होता है](https://abox.tools/hi/guides/open-a-dicom-file/): अस्पताल की डिस्क में क्या होता है, फ़ाइलों पर एक्सटेंशन क्यों नहीं होता, .dcm स्कैन ब्राउज़र में कैसे खोलें, विंडो और लेवल असल में क्या करता है, और स्कैन तस्वीर के अलावा मरीज़ के बारे में क्या-क्या लिए चलता है।

## बॉक्स में और भी टूल

- [तस्वीर से ICO](https://abox.tools/hi/image-to-ico/): एक तस्वीर भीतर। ब्राउज़र, Windows या Mac जो भी साइज़ माँगे, वह सब बाहर।
- [तस्वीर से data URI](https://abox.tools/hi/image-to-data-uri/): पूरी तस्वीर, टेक्स्ट की एक पंक्ति में। सीधे CSS या HTML में चिपका दीजिए।
- [SVG से तस्वीर](https://abox.tools/hi/svg-to-image/): साइज़ बताइए। वेक्टर के पास खोने को अपना कोई साइज़ है ही नहीं।
- [तस्वीर से SVG](https://abox.tools/hi/image-to-svg/): एक आकार, एक आउटलाइन। जो नहीं होना चाहिए, उस पर बस उँगली रख दीजिए।

## सवाल

### क्या मेरा स्कैन कहीं अपलोड होता है?

नहीं। फ़ाइल को पढ़ना, डीकोड करना और बनाना, यह सब आपका अपना ब्राउज़र आपके अपने हार्डवेयर पर करता है। इस टूल का कोई सर्वर वाला हिस्सा है ही नहीं, और पेज की `Content-Security-Policy` में हर वह पता लिखा है जिससे वह बात कर सकता है। उनमें से एक भी इस साइट का नहीं है। नेटवर्क का तार खींच दीजिए, फिर भी स्कैन खुलते रहेंगे। \
\
यह बात यहाँ इस साइट के किसी भी दूसरे पेज से ज़्यादा मायने रखती है। DICOM फ़ाइल अपने हेडर में मरीज़ का नाम, जन्म तारीख और अस्पताल का नंबर लिए चलती है, इसलिए उसे किसी व्यूअर पर चढ़ाने का मतलब है किसी अजनबी को तस्वीर नहीं, मेडिकल रिकॉर्ड सौंप देना।

### यह कौन-सी DICOM फ़ाइलें खोल सकता है?

तीनों बुनियादी transfer syntax में बिना कंप्रेस की फ़ाइलें, यानी implicit और explicit little endian, और वह big endian जो अब हटा दी गई है। इनके अलावा deflated, RLE Lossless, baseline JPEG और JPEG Lossless भी, और अस्पताल की डिस्क पर मौजूद ज़्यादातर CT और MRI जाँचें इसी आखिरी तरीके से कंप्रेस होती हैं। \
\
यह JPEG 2000, JPEG-LS, और वीडियो में इस्तेमाल होने वाली MPEG व HEVC सिंटैक्स डीकोड नहीं कर सकता। उनके लिए ऐसे कोडेक चाहिए जो कई मेगाबाइट की कंपाइल की हुई लाइब्रेरी होते हैं, और जो पेज ज़रूरत पड़ने पर उन्हें मँगाता वह ऑफ़लाइन चलने वाला पेज न रह जाता। ऐसी किसी फ़ाइल के साथ भी काम चलता है। पूरा हेडर पढ़कर दिखा दिया जाता है, और तस्वीर की जगह एक लाइन आती है जो कोडेक का नाम बताती है, न कि टूटी इमेज का वह निशान जो कुछ नहीं बताता।

### ‘विंडो और लेवल’ क्या है, और यह क्यों चाहिए?

एक CT स्लाइस में करीब चार हज़ार अलग-अलग मान होते हैं और आपकी स्क्रीन दो सौ छप्पन धूसर रंग दिखाती है। किसी को तय करना पड़ता है कि उन चार हज़ार में से कौन-सा हिस्सा उन सभी दो सौ छप्पन को पाएगा, और वही चुनाव **विंडो** है। उससे नीचे सब काला, उससे ऊपर सब सफ़ेद, और बीच का हिस्सा धूसर रंगों में फैला हुआ। \
\
इसीलिए वही फ़ाइल दो सेटिंग में दो अलग स्कैन जैसी दिखती है, और इसीलिए फेफड़ा और हड्डी एक साथ नहीं देखे जा सकते। CT पर ये संख्याएँ हाउंसफ़ील्ड इकाई हैं, जो पूरी तरह तय हैं। पानी 0 है और हवा −1000, हर CT मशीन पर। इसलिए इस पेज की नाम वाली विंडो वही संख्याएँ हैं जो कोई रेडियोलॉजिस्ट अपने वर्कस्टेशन पर इस्तेमाल करता है। MRI या अल्ट्रासाउंड पर ऐसा कोई पैमाना नहीं होता, और जो विंडो खुलती है वह वही है जो फ़ाइल खुद माँगती है।

### यह मेरी नाप को पिक्सल में क्यों बता रहा है?

क्योंकि वह फ़ाइल यह नहीं बताती कि एक पिक्सल कितना बड़ा है। यह बात Pixel Spacing (0028,0030) में मिलीमीटर में लिखी होती है, और बहुत सारी अल्ट्रासाउंड इमेज, स्कैन किए हुए कागज़ और secondary capture में वह होती ही नहीं। \
\
जहाँ वह होती है, वहाँ नाप मिलीमीटर में आती है और हर अक्ष अपनी दूरी से नापा जाता है, जो उन तस्वीरों में मायने रखता है जिनके पिक्सल वर्गाकार नहीं होते। जहाँ वह नहीं होती, वहाँ ईमानदार जवाब पिक्सल की गिनती है, और यह उसे कहता भी है, न कि कोई पैमाना चुनकर नतीजे को लंबाई की तरह पेश करता है।

### इसने मेरे फ़ोल्डर को कई सीरीज़ में खोल दिया। ऐसा क्यों?

क्योंकि उसमें यही है। एक जाँच सीरीज़ से बनती है, पहले स्काउट व्यू और फिर हर शॉट या रीकंस्ट्रक्शन, और हर फ़ाइल Series Instance UID (0020,000E) में बताती है कि वह किसकी है। सूची फ़ोल्डर से नहीं, इसी से बनती है, क्योंकि फ़ोल्डर में तो आम तौर पर सब कुछ नामों की एक ही लिस्ट में मिला-जुला पड़ा होता है। \
\
सीरीज़ के भीतर स्लाइस इस हिसाब से क्रम में लगती हैं कि हर एक शरीर में कहाँ है, जो Image Position और Image Orientation से निकलता है। Instance Number सीधी-सी कुंजी है, लेकिन वह पहली पसंद नहीं बल्कि आखिरी सहारा है, क्योंकि उसे वही चीज़ देती है जिसने फ़ाइलें लिखीं और ज़रूरी नहीं कि वह मरीज़ की दिशा में चले।

### ‘मरीज़ की पहचान क्या कराता है’ वाली सूची का क्या मतलब है?

यह आपकी फ़ाइल का हर वह फ़ील्ड है जो स्कैन वाले इंसान का नाम लेता है, या यह छाँटता है कि वह कौन हो सकता है, और यह सब आपकी मशीन पर इसी फ़ाइल से पढ़ा गया है। सूची DICOM स्टैंडर्ड के PS3.15 से आती है, यानी उस हिस्से से जो बताता है कि किसी डेटासेट को de-identified कहने से पहले उसमें से क्या-क्या जाना चाहिए। \
\
यह इसलिए है कि लोग जहाँ गलती करते हैं वह यह नहीं है कि स्कैन में नाम होता है। गलती इस बारे में होती है कि उसमें और कितना कुछ होता है। जन्म तारीख, रेफ़रेंस नंबर, रेफ़र करने वाला डॉक्टर, संस्थान, मशीन का सीरियल नंबर, और जाँच के UID, जो उस आर्काइव तक लौटने की एकदम सटीक कुंजी हैं जिसने यह फ़ाइल बनाई। जिस स्कैन से सिर्फ़ नाम मिटा दिया गया हो वह गुमनाम नहीं होता। \
\
यह टूल सिर्फ़ दिखाता है। यह कुछ लिखता नहीं और कुछ बदलता नहीं, इसलिए इसमें से कुछ निकाल भी नहीं सकता।

### क्या यह स्कैन को गुमनाम कर सकता है?

नहीं, और यह जान-बूझकर ऐसा होने का दिखावा भी नहीं करता। यह पेज पढ़ता है। इसमें ऐसा कोई कोड नहीं है जो DICOM फ़ाइल लिखे। यह जो करता है वह यह बताना है कि आपकी फ़ाइल में ठीक-ठीक क्या है, और यही वह हिस्सा है जो पता करना मुश्किल है और जिसके बारे में लोग गलत होते हैं। \
\
पहचान बताने वाले फ़ील्ड निकालने वाला टूल एक अलग काम है जिसका पैमाना कहीं ऊँचा है। उसे पिक्सल छुए बिना फ़ाइल दोबारा लिखनी होगी, पूरी जाँच में UID एक-से ढंग से बदलने होंगे, और उन प्राइवेट एलिमेंट के बारे में सही होना होगा जिनमें कुछ मशीनें नाम की दूसरी कॉपी छिपा देती हैं। वह इस साइट के रोडमैप पर है, किसी व्यूअर के साथ चिपकाने की चीज़ नहीं।

### क्या यह बिना .dcm एक्सटेंशन वाली या टूटी हुई फ़ाइल खोल सकता है?

दोनों के लिए हाँ। एक्सटेंशन देखा ही नहीं जाता, जाँच खुद फ़ाइल की होती है। जो डेटासेट आम 128 बाइट की भूमिका के बिना लिखा गया हो, और सीधे नेटवर्क से आया स्कैन ऐसा ही दिखता है, उसे उसके पहले एलिमेंट से एन्कोडिंग निकालकर पढ़ा जाता है, और पेज बता भी देता है कि उसने यही किया। \
\
जो फ़ाइल बीच में ही खत्म हो जाती है वह जहाँ तक जाती है वहाँ तक पढ़ी जाती है। खराबी से पहले का सब कुछ दिखाया जाता है, साथ में यह नोट कि वह किस बाइट पर रुकी। व्यूअर की सबसे ज़्यादा ज़रूरत ऐसे ही मौकों पर पड़ती है, इसलिए आखिरी बारह बाइट के लिए पूरी फ़ाइल फेंक देना गलत बर्ताव होता।

### क्या यह डायग्नोस्टिक व्यूअर है?

नहीं। यह मेडिकल डिवाइस नहीं है, यह किसी नियामक जाँच से नहीं गुज़रा है, और यहाँ की किसी भी चीज़ से कोई क्लिनिकल फ़ैसला नहीं लिया जाना चाहिए। आपकी स्क्रीन कैलिब्रेट नहीं है, ब्राउज़र कोई प्रमाणित रेंडरिंग चेन नहीं है, और इनमें से कोई भी बात किसी वेब पेज के भीतर से ठीक नहीं की जा सकती। \
\
बाकी हर उस काम के लिए यह अच्छा है जिसके लिए लोग स्कैन खोलते हैं। डिस्क में क्या है यह देखना, किसी लेक्चर या पर्चे के लिए एक स्लाइस निकालना, हेडर पढ़ना, यह पता करना कि कोई दूसरा प्रोग्राम इस फ़ाइल को क्यों मना कर रहा है, और यह देखना कि स्कैन उस इंसान के बारे में क्या-क्या लिए चल रहा है।

### क्या यह मेरी फ़ाइल बदलता है?

नहीं। यह टूल सिर्फ़ पढ़ता है। न कोई आउटपुट फ़ाइल है, न दोबारा एन्कोडिंग, और न यहाँ कोई बटन है जो DICOM लिखे। आप जो डाउनलोड कर सकते हैं वह है स्क्रीन पर दिख रही तस्वीर की PNG और हेडर की सादे टेक्स्ट वाली कॉपी। आपकी असली फ़ाइल आपकी डिस्क पर ज्यों की त्यों रहती है।

### क्या यह मुफ़्त है, और क्या अकाउंट चाहिए?

यह मुफ़्त है, और न अकाउंट है, न साइन-इन, न कोई ट्रायल। फ़ाइल के साइज़ पर या कितनी फ़ाइलें खोलें इस पर कोई सीमा नहीं है, सिवाय आपकी अपनी मशीन की मेमोरी के। साइट पर विज्ञापन चलते हैं और उन्हीं से इसका खर्च निकलता है, और विज्ञापनों को आपकी फ़ाइल के बारे में कुछ नहीं दिया जाता।

### क्या यह ऑफ़लाइन चलता है?

हाँ। पेज एक बार लोड कर लीजिए, फिर इंटरनेट बंद कर दीजिए और यह चलता रहेगा। यह साबित करने का सबसे आसान तरीका भी यही है कि कुछ अपलोड नहीं हो रहा, क्योंकि जो टूल आपका स्कैन कहीं भेजकर बनवाता होता वह तार खींचते ही रुक जाता।

## प्राइवेसी का यह दावा कैसे जाँचा जा सकता है

- **आपके स्कैन के जाने के लिए कोई जगह ही नहीं है।** Content-Security-Policy में हर वह पता लिखा है जिससे यह पेज बात कर सकता है, और उनमें से एक भी इस साइट का नहीं है। यहाँ कोई ऐसा एंडपॉइंट नहीं है जहाँ आपकी फ़ाइल जमा हो सके, और कोड में ऐसा कुछ नहीं है जो होता तो भी उसे भेजता। पहले यहाँ `connect-src 'none'` लिखा था, जो पूरी तरह बंद था। विज्ञापन जोड़ने पर वह चला गया, और यह कहना भी उसी सौदे का हिस्सा है।
- **यह बात यहाँ बाकी पेजों से ज़्यादा भारी पड़ती है।** DICOM फ़ाइल मेटाडेटा लगी हुई तस्वीर नहीं है। वह तस्वीर वाला मेडिकल रिकॉर्ड है। मरीज़ का नाम, जन्म तारीख, अस्पताल का नंबर, रेफ़रेंस नंबर, जाँच लिखने वाला डॉक्टर, संस्थान और मशीन का सीरियल नंबर, ये सब हेडर के फ़ील्ड हैं और फ़ाइल जहाँ भी जाती है उसके साथ जाते हैं। उसे बस देखने के लिए किसी वेबसाइट पर चढ़ा देने का मतलब है यह सब उस वेबसाइट को चलाने वाले के हाथ में दे देना। यह पेज ठीक यही न करने के लिए बना है।
- **पढ़ने वाला हिस्सा इस रिपॉज़िटरी की चौदह फ़ाइलें हैं।** यहाँ कोई भी चीज़ कहीं से मँगाई गई लाइब्रेरी इस्तेमाल नहीं करती। `src/dicom.js` फ़ाइल में चलता है, `src/dictionary.js` जानता है कि टैग किस नाम से जाने जाते हैं, `src/pixels.js` बाइट को वापस नाप में बदलता है, `src/rle.js` और `src/jpeg-lossless.js` उन दो कंप्रेस्ड रूपों को खोलते हैं जिन्हें यह पेज डीकोड कर सकता है, और `src/window.js` नापे गए मानों को आपकी स्क्रीन के धूसर रंगों पर बिठाता है।
- **पहचान बताने वाले फ़ील्ड आपके लिए गिनाए जाते हैं, और किसी के लिए नहीं।** यह पेज आपकी फ़ाइल का हर वह फ़ील्ड छापकर दिखाता है जो उस इंसान का नाम लेता है या यह छाँटता है कि वह कौन हो सकता है। यही वह सवाल है जिसका जवाब किसी स्लाइस को साझा करने जा रहे इंसान को चाहिए होता है, और कोई व्यूअर उसका जवाब नहीं देता। वह आपके सामने स्क्रीन पर आता है और कहीं और नहीं जाता। इस रिपॉज़िटरी में कोई एनालिटिक्स इवेंट नहीं है जो उसमें से कुछ भी ले जाए, और होता भी तो यह पेज उसे भेज नहीं सकता।
- **यह पढ़ता है। लिखता नहीं।** यहाँ कोई बटन नहीं है जो आपकी फ़ाइल बदले, और न ऐसा कोई कोड है जो बदल सके। आप जो साथ ले जा सकते हैं वह है स्क्रीन पर दिख रही तस्वीर की PNG और हेडर की टेक्स्ट कॉपी। दोनों इसी पेज में उसी चीज़ से बनते हैं जो पहले से यहाँ मौजूद है। आपकी असली फ़ाइल आपकी डिस्क पर ज्यों की त्यों रहती है, और टैब बंद करने पर क्या होता है इसका ईमानदार जवाब भी यही है।
- **गूगल क्या लोड करता है, और उसे क्या नहीं मिलता।** विज्ञापन और माप की स्क्रिप्ट गूगल से आती हैं। इनमें से किसी को भी आपकी फ़ाइल के बारे में कुछ नहीं दिया जाता। न पिक्सल, न थंबनेल, न कोई नाम, न टैग, न मरीज़, न फ़ाइल का नाम। स्कैन को पढ़ने, डीकोड करने और बनाने वाली हर लाइन इसी ऑरिजिन से आती है और रिपॉज़िटरी में लिखी है।
- **दान वाला बटन क्या लोड करता है, और उसे क्या नहीं मिलता।** ऊपर लगा “Buy me a coffee” बटन cdnjs.buymeacoffee.com की एक स्क्रिप्ट बनाती है और उसके अक्षर Google Fonts से आते हैं। वह बस एक लिंक है। न वह किसी विज़िट की खबर देता है, न उसे आपके या आपकी फ़ाइलों के बारे में कुछ मिलता है। जब तक आप उस पर क्लिक न करें कुछ नहीं होता, और क्लिक करने पर आप किसी और की साइट पर पहुँचते हैं।
- **यह ऑफ़लाइन चलता है।** नेटवर्क काट दीजिए और इस पेज का हर हिस्सा वैसे ही चलता रहेगा। यही सबसे आसान सबूत है, क्योंकि जो टूल आपका स्कैन कहीं भेजकर बनवाता होता वह तार खींचते ही रुक जाता।

**खुद जाँच लीजिए।** ऊपर लिखी किसी भी बात को भरोसे पर मानने की ज़रूरत नहीं। यह पेज रिपॉज़िटरी के टेम्पलेट और कॉन्फ़िग से बनता है, एक ऐसी बिल्ड स्क्रिप्ट के ज़रिए जिसे आप पढ़ भी सकते हैं और खुद चला भी सकते हैं। उसका नतीजा `dist` ब्रांच पर कमिट रहता है, यानी जो सर्व हो रहा है और सोर्स से बिल्ड करने पर जो बनता है, दोनों का फ़र्क आप खुद देख सकते हैं: https://github.com/A-Box-of-Tools/website

सबसे पहले पढ़ने लायक फ़ाइलें ये हैं — Content-Security-Policy के लिए `config/site.toml`, फ़ाइल में चलने वाले पार्सर के लिए `src/dicom.js`, पिक्सल डीकोडिंग के लिए `src/pixels.js`, वह कोडेक जिससे ज़्यादातर अस्पताल एक्सपोर्ट करते हैं उसके लिए `src/jpeg-lossless.js`, और विंडो व लेवल के लिए `src/window.js`। इनमें से किसी में भी ऐसी एक लाइन नहीं है जो नेटवर्क तक पहुँच सके।
