लगभग सभी छवि गुणवत्ता नुकसान पहली बार होते हैं जब कोई छवि JPEG के रूप में संकुचित होती है। भले ही कितनी बार JPEG समान सेटिंग्स के साथ फिर से शुरू किया गया हो , लेकिन जनरेशनल नुकसान गोलाई की त्रुटि तक सीमित हैं।
एमसीयू की सीमाएं बरकरार हैं (8x8 ब्लॉक)।
Chroma सबसैंपलिंग अक्षम है।
लगातार DQT (एक ही गुणवत्ता सेटिंग)।
हालाँकि, राउंडिंग त्रुटियां प्रत्येक पुनरावृत्ति के लिए बड़ी हो सकती हैं जो उपरोक्त मानदंडों को पूरा नहीं करती हैं, और सभी मूल फ़ाइलों का बैकअप रखना समझदारी है।
रंगस्थान परिवर्तित करें। अगर वांछित, downsample रंग जानकारी (क्रोमा सबसैम्पलिंग) (अस्पष्ट) । यदि अस्वीकृत नहीं किया गया है, तो सूचना का नुकसान राउंडिंग त्रुटि का परिणाम है ।
विभाजन। प्रत्येक चैनल को 8x8 ब्लॉक (MCU = Minimal Coding Unit) में विभाजित करें। (दोषरहित)
ध्यान दें: यदि क्रोमा सबसैम्पलिंग सक्षम है, तो मूल छवि के संदर्भ में MCUs प्रभावी रूप से 16x8, 8x16 या 16x16 हो सकते हैं। हालाँकि, MCU अभी भी सभी 8x8 ब्लॉक हैं।
प्रत्येक MCU पर असतत कोसाइन ट्रांसफॉर्म (DCT)। सूचना का नुकसान गोलाई त्रुटि का परिणाम है ।
परिमाणीकरण। MCU के प्रत्येक सेल में मूल्य एक परिमाणीकरण तालिका (DQT) में निर्दिष्ट संख्या से विभाजित होता है। मान नीचे किए गए हैं, जिनमें से कई शून्य हो जाएंगे। यह एल्गोरिथम का प्राथमिक हानिपूर्ण भाग है।
ज़िग-ज़ैग स्कैन। ज़िग-ज़ैग पैटर्न के बाद संख्या के अनुक्रम में प्रत्येक MCU में मानों को पुन: व्यवस्थित करें। परिमाणीकरण के दौरान होने वाले शून्य को एक साथ समूहीकृत किया जाएगा। (दोषरहित)
डीपीसीएम = विभेदक पल्स कोड मॉड्यूलेशन। संख्या अनुक्रमों को ऐसे रूप में परिवर्तित करें जो संपीड़ित करना आसान हो। (दोषरहित)
RLE = रन लंबाई एन्कोडिंग। लगातार शून्य संकुचित होते हैं। (दोषरहित)
एन्ट्रॉपी / हफमैन कोडिंग। (दोषरहित)
जेपीईजी को फिर से तैयार करना
ध्यान दें कि रंग चैनलों और मात्रा का ठहराव केवल जानबूझकर नुकसानदेह कदम हैं । अब के लिए अलग-अलग राउंडिंग त्रुटि सेट करना, अन्य सभी चरण दोषरहित हैं। एक बार परिमाणीकरण हो जाने के बाद, कदम को पीछे हटाना और दोहराना समान परिणाम देता है। दूसरे शब्दों में, पुनः-परिमाणीकरण (समान DQT के साथ) दोषरहित है ।
सिद्धांत रूप में, एक पुनरुत्थान एल्गोरिथ्म बनाना संभव है जो पहले पास के बाद दोषरहित है। हालाँकि, ImageMagick में कार्यान्वयन के साथ, रंग स्थिर अवस्था में आने से पहले काफी हद तक शिफ्ट हो सकते हैं, जैसा कि ths की छवि में देखा गया है।
इष्टतम स्थितियों को देखते हुए, एक ही गुणवत्ता सेटिंग्स के साथ एक जेपीईजी को पुनः प्राप्त करना ठीक जेपीईजी में परिणाम होगा। दूसरे शब्दों में, JPEGs को फिर से जोड़ना संभावित रूप से दोषरहित है । व्यवहार में, JPEGs को पुनः प्राप्त करना दोषरहित नहीं है, लेकिन त्रुटि के अनुसार, और इसके द्वारा सीमित है। हालांकि गोलाई की त्रुटियां अक्सर शून्य में परिवर्तित हो जाती हैं , जिससे कि एक ही छवि फिर से बनाई जाती है, क्रोमा सबसम्पलिंग के परिणामस्वरूप महत्वपूर्ण शारीरिक परिवर्तन हो सकते हैं।
प्रदर्शन (समान गुणवत्ता सेटिंग)
मैंने निम्न bash
स्क्रिप्ट लिखी है, जो किसी दिए गए गुणवत्ता सेटिंग में JPEG फ़ाइल को बार-बार पुनर्प्राप्त करने के लिए ImageMagick का उपयोग करता है:
#!/usr/bin/env bash
n=10001; q1=90
convert original.png -sampling-factor 4:4:4 -quality ${q1} ${n}.jpg
while true ; do
q2=${q1} # for variants, such as adding randomness
convert ${n}.jpg -quality ${q2} $((n+1)).jpg
#\rm $((n-5)).jpg # uncomment to avoid running out of space
n=$((n+1))
echo -n "$q2 "
md5sum ${n}.jpg
done
कुछ सौ पुनरावृत्तियों के लिए इसे चलाने के बाद, मैं md5sum
परिणामों पर भाग गया:
d9c0d55ee5c8b5408f7e50f8ebc1010e original.jpg
880db8f146db87d293def674c6845007 10316.jpg
880db8f146db87d293def674c6845007 10317.jpg
880db8f146db87d293def674c6845007 10318.jpg
880db8f146db87d293def674c6845007 10319.jpg
880db8f146db87d293def674c6845007 10320.jpg
हम देख सकते हैं कि, वास्तव में, राउंडिंग त्रुटि शून्य में परिवर्तित हो गई है, और ठीक उसी छवि को बार-बार पुन: प्रस्तुत किया जा रहा है ।
मैंने इसे कई बार अलग-अलग छवियों और गुणवत्ता सेटिंग्स के साथ दोहराया है। आमतौर पर, स्थिर स्थिति तक पहुंच जाता है, और ठीक उसी छवि को बार-बार पुन: प्रस्तुत किया जाता है।
मैंने Ubuntu 18.04 पर Imagemagick का उपयोग करके mattdm के परिणामों को दोहराने का प्रयास किया है। मूल रॉथरपी में TIFF के लिए एक कच्चा रूपांतरण था, लेकिन अब यह उपलब्ध नहीं लगता है। इसके स्थान पर, मैंने बढ़े हुए संस्करण को लिया और इसे अपने मूल आकार (256x256) में घटा दिया। तब मैं बार-बार 75 में पुन: मिला जब तक मुझे अभिसरण नहीं मिला। यहाँ परिणाम (मूल, 1, n, अंतर) है:
मेरे परिणाम अलग हैं। वास्तविक मूल के बिना, अंतर का कारण निर्धारित करना असंभव है।
मैंने असेंबल के ऊपरी बाएं कोने से 90 तक अभिसरण तक छवि को फिर से दबाया। यह परिणाम (मूल, 1, एन, अंतर) है:
क्रोमा सबसैम्पलिंग को सक्षम करने के बाद, रंग तब तक बदलते रहते हैं जब तक स्थिर स्थिति नहीं पहुंच जाती।
कम संख्या में सेटिंग में बदलाव करना
चर को संशोधित करके q2
, गुणवत्ता सेटिंग समान रूप से वितरित मूल्यों के एक सेट तक सीमित हो सकती है।
q2=$(( (RANDOM % 3)*5 + 70 ))
सेटिंग विकल्पों की एक छोटी संख्या के लिए, संतुलन अंततः पहुंच सकता है , जिसे तब देखा जाता है जब md5 मान पुनरावृत्ति करना शुरू करते हैं। ऐसा लगता है कि सेट जितना बड़ा होगा, उतना ही लंबा समय लगेगा, और छवि जितनी खराब होगी, इससे पहले कि संतुलन तक पहुंचा जा सके।
संतुलन के लिए जो प्रतीत होता है, वह DCT गुणांक से पहले का गुणांक है जो क्वांटम मानों के सभी (या अधिकांश) को विभाज्य होना चाहिए। उदाहरण के लिए, यदि दो DQTs के बीच स्विच करना जहां DCT गुणांक को 3 और 5 द्वारा वैकल्पिक रूप से विभाजित किया जाता है, तो DCT गुणांक 15 तक विभाज्य हो जाएगा।
बड़ी संख्या में सेटिंग में बदलाव करना
Eeyore खुश नहीं है जब q2
ऐसा बदला जाता है:
q2=$(( (RANDOM % 9) + 90 ))
वीडियो बनाने के लिए, उपयोग करें ffmpeg
:
rename 's@1@@' 1*.jpg
ffmpeg -r 30 -i %04d.jpg -c:v libx264 -crf 1 -vf fps=25 -pix_fmt yuv420p output.mp4
पहले 9999 पुनरावृत्तियों को देखना लगभग पानी उबालने जैसा है। प्लेबैक की गति को दोगुना करना चाहते हैं। यहाँ 11999 पुनरावृत्तियों के बाद Eeyore है:
क्या होगा अगर एमसीयू सीमाएं बदल जाएं?
यदि परिवर्तन कई बार सीमित संख्या में होते हैं, तो बार-बार पुनर्संक्रमण स्थिर अवस्था में पहुंचने की संभावना है। यदि प्रत्येक पुनरावृत्ति में परिवर्तन होते हैं, तो संभवतः DQT के बदलने पर छवि उसी तरह से ख़राब हो जाएगी।
- वीडियो में ऐसा होता है जो एक छवि को आयामों के साथ घुमाता है जो 8 से विभाज्य नहीं हैं।
संपादन के बारे में क्या?
संपादन के बाद पुनःसंयोजन का प्रभाव प्रदर्शन किए गए विशेष संपादन पर निर्भर करता है। उदाहरण के लिए, जेपीईजी की कलाकृतियों को कम करने के बाद उसी गुणवत्ता की सेटिंग में बचत करना समान कलाकृतियों को फिर से प्रस्तुत करेगा। हालाँकि, एक स्थानीय परिवर्तन को लागू करना, जैसे हीलिंग ब्रश, उन क्षेत्रों को प्रभावित नहीं करेगा जिन्हें छुआ नहीं गया था।
छवि गुणवत्ता में सबसे बड़ी गिरावट पहली बार होती है जब फ़ाइल किसी दिए गए गुणवत्ता सेटिंग में संकुचित होती है। बाद में एक ही सेटिंग के साथ पुन: जुड़ना राउंडिंग त्रुटि से अधिक किसी भी परिवर्तन का परिचय नहीं देना चाहिए। इसलिए मुझे उम्मीद है कि दिए गए क्वालिटी सेटिंग में एडिट-रेसेव साइकल को समान क्वालिटी सेटिंग के साथ सेव की गई किसी अन्य इमेज की तरह देखने के लिए (जब तक MCU की सीमाएँ बरकरार रहें और क्रोमा सबसम्पलिंग अक्षम हो )।
उन वीडियो का क्या?
दोषपूर्ण जेपीईजी कार्यान्वयन? ( फोटोशॉप से 10/12 पर 500 बार री-सेविंग। )
गुणवत्ता सेटिंग्स बदलना। (सबसे अधिक)
एमसीयू सीमाओं को बाधित करना। (फसल या सड़ )
अन्य युद्धाभ्यास जो छवि गुणवत्ता को कम करते हैं या जेपीईजी एल्गोरिथ्म में हस्तक्षेप करते हैं?
क्या मैं जेपीईजीएस के साथ अपने मूल को ओवर-राइट कर सकता हूं?
सभी मूल फ़ाइलों का बैकअप रखना समझदारी है, लेकिन यदि आप गलती से एक को ओवरराइट कर देते हैं, तो नुकसान की संभावना सीमित है। यह जेपीईजी में काम करने के लिए ठीक होगा जिसमें क्रोमा सबमैंपलिंग अक्षम है।
JPEG का उपयोग उन छवियों के लिए नहीं किया जा सकता है जो प्रति रंग 8 बिट से अधिक का उपयोग करते हैं।