Fractal image compression

Fractal image compression एपलिकल सिद्धांत का एक उत्तेजक अनुप्रयोग है, विशेष रूप से छवि संपीडन में

वर्णन

इस अनुप्रयोग के साथ, आप कर सकते हैं:

  • छवि को इस तौरातीय विधि से संपीडित करें
  • पहले से संपीडित छवियों को भिन्न फॉर्मेट में असंपीडित कर दिया गया

प्लेटफ़ॉर्म के लाइब्रेरी का उपयोग करें, जिसमें निम्नलिखित विशेषताएँ शामिल हैं:

  • मल्टी- कम्पलीशन
  • कॉन्फ़िगर किया जा सकने योग्य बहु- स्थिर जूम
  • गहरा मोड विकल्प
  • नई संस्करण सूचना


प्रोविडेंस:

  • जब उचित रूप से व्यवस्था की जाती है, यह छवि रेज़ोल्यूशन के स्वतंत्र रूप से कार्य करता है
  • यह एक विशिष्ट संपीडन विधि है
  • जब आप जाते हैं तो आपको सीखने देता है


कनेक्शनः

  • संपीडन प्रक्रिया बहुत धीमी होती है
  • आप बहुत अधिक संपीडन अनुपात प्राप्त नहीं है (जब भी मैं इस्तेमाल किया गया पैरामीटर के साथ)

कोड वर्णन

यह इस का कार्यान्वयन हैfractal image compression एल्गोरिदमकॉलेज के दिनों में प्रकाशित

इस अनुप्रयोग में भी इस्तेमाल किया जाता हैमॉर्फिंग अनुप्रयोग


उच्च स्तर एल्गोरिदम:

  • संपीडनः
    • प्रारूपीय संपीडन छवि क्षेत्रों के बीच सम्बन्धों को जमा करने पर ध्यान केंद्रित करता है बजाए वास्तविक पिक्सेल मूल्य, विशेष रूप से इस मामले में त्रिकोण के बीच.
    • छवि को एक त्रिकोणीय ग्रिड में विभाजित किया जाता है जिसमें अनेक त्रिकोण होते हैं, जो कि विविध डोमेन बना देता है ।
    • इस छवि को कोडबुक के लिए बनाए गए बड़े त्रिकोण के एक नए सेट में परिवर्तित किया जाता है.
    • त्रिकोणीय सिद्धांत गतिशील हैं, और विभाजन और सम्मिलित एल्गोरिदम त्रिकोण पिक्सेल के विभाजन पर लागू होता है.
    • कोडबुक के लिए एक बार जांच की जाती है, सबसे छोटा प्रतिनिधि 2^n त्रिकोण चुन लिया जाता है कोडबुक बनाने के लिए. n उल्लेखनीय प्रभाव स्तर पर स्थिर समय और गुणवत्ता प्राप्त करने के लिए।
    • हर डोमेन त्रिभुज के लिए, कोडबुक में से एक त्रिकोण के साथ एक न्यूनतम मतलब वर्ग त्रुटि का उपयोग कर रहा है (M)
    • त्रिकोण के संयोजन के द्वारा पाया जाता है:
      • संभावनाओं पर निर्भर करता है (6 संभावनाओं)
      • अर्थ के लिए एक ऑफसेट बाध्य करना
      • 0 से 1 के बीच एक स्केल कारक ढूंढा जा रहा है जो इसका अर्थ से विचलन के लिए लागू किया गया है. इस स्केल फ़ैक्टर को 0 तथा 1 के बीच ही रहने देना चाहिए यह अप्रयोगिक प्रक्रिया के दौरान
      इसके अतिरिक्‍त, इन पैरामीटरों को सीमित संख्या के इस्तेमाल से निकाला जाना चाहिए ताकि यह निश्‍चित कर सकें कि संपीडन का समय और अनुपात तर्कसंगत और वांछित गुणवत्ता के अनुरूप हों ।
  • प्रत्येक चैनल के लिए संपीडित फ़ाइल में भंडारित जानकारी:
    • दो सायकलियों को दोबारा बनाने के लिए जानकारी:
      • त्रिकोण जो प्रत्येक भाग में विभाजित होता है
      • एक सम्मिलित के परिणाम के रूप में निकाल दिया गया था (संग्राम पूरा करने के बाद)
    • कोडबुक के 2^n त्रिभुज का चयन
    • प्रत्येक डोमेन त्रिभुज का अनुकूलित बनावट:
      • कौन सा कोडबुक त्रिभुज यह मैप में उपयोग करता है (n)
      • Smutation (6 संयोजन, 3 बिट्स)
      • ऑफसेट (जो लेखक ऑफसेट 6 बिट्स से प्रभावी रूप से प्रतिनिधित्व किया गया है)
      • स्केल (संपादक लेखक संकेत करते हैं कि स्केल 6 बिट्स से प्रभावी रूप से चित्रित होता है)
  • असंपीडित (प्रत्येक चैनल के लिए):
    • दो त्रिकोण के त्रिकोण प्राप्त किए जाते हैं.
    • कोडबुक त्रिभुज प्राप्त किए गए हैं.
    • यह प्रक्रिया तब तक बार- बार दोहराया जाता है जब तक कि संयोग प्राप्त नहीं होती:
      • कोडबुक त्रिभुज के साथ सभी डोमेन त्रिकोण का प्रतिरूप


कलावादी ज्ञान में एक मास्टर की डिग्री का लाभ उठाने के बाद, मैं कल्पना कर रहा हूँ कि कोड बुक पर लागू करने के लिए कोड के लिए सबसे महत्वपूर्ण त्रिकोण कैसे प्राप्त करें.

मैं अनिश्‍चित हूँ कि अगर नवजात बच्चे सुधार करेंगे या एल्गोरिथ्म को रोका जाएगा, लेकिन यह मुझे अपने आप को प्रोग्राम करने की जरूरत से बचा लेता है, जो शुरू में जटिल लग रहा था.


छवि प्रक्रिया चैनल में विभाजित है, सामान्य रूप से RGB.

यह विभिन्‍न प्रक्रियाओं का इस्तेमाल करता है, प्रत्येक चैनल को समर्पित एक थ्रेड के साथ ।


संस्करण v1.1 के साथ एक पाठक छवि आईआईओ मानक के साथ संगत है जोड़ा गया है.

अतः, आप अनुप्रयोग के साथ एक संपीडित छवि खोल सकते हैं (. ddc) सिर्फ यह करने के द्वारा:

BufferedImage image = ImageIO.read("image.dfc");

विंडोज़

Fractal image compression v1. 1 (2026)

डाउनलोड

संस्करण

image

अनुप्रयोग अपने विश्‍वविद्यालय के दिनों से एक IEEEA कागज में वर्णित एक fractal image compression एल्गोरिथ्म लागू करता है ।

मैंने विश्‍वविद्यालय के एक साथी के साथ इस एल्गोरिथ्म का प्रारंभिक संस्करण विकसित करने के लिए सहयोग दिया ।

इंटरनेट अभी - भी अपनी शुरूआती चरणों में था, और किसी भी प्रगति पर लगभग व्यक्‍तिगत प्रयासों और भौतिक दस्तावेज़ों पर निर्भर थी ।

मुझे याद है कि हमने एक बहुत अच्छी तरह से अच्छी तरह से विकसित किया और विभाजन और जोड़ने में सफलता दी. इसमें सबसे प्रतिनिधि त्रिकोण शामिल था और codding प्रक्रिया के दौरान mulps खोजने में शामिल थे. हालांकि, तीन महीने कड़ी विकास के बावजूद, हम कभी भी आवेदन पूरा नहीं किया.

अब, 25 साल बाद, मैं आप के लिए प्रस्तुत करता हूँ एल्गोरिथ्म के इस नए कार्यान्वयन, पूरी तरह विकसित और दो सप्ताह के एक रिकॉर्ड समय में पूरा।

साथ ही, इस बार अतिरिक्‍त कार्य के साथ त्रिकोण को नियंत्रित करने के लिए अतिरिक्‍त कार्य समर्थन के साथ, जो मैंने पहले से ही मोरपिंग अनुप्रयोग के लिए जमा किया था ।

इस बार, पेशेवरों द्वारा आयोजित एक डेज़ी पुस्तकालय का प्रयोग करते हुए ।

यह स्पष्ट है कि जब आप ईंटों को अपने आप बनाने के लिए नहीं है, तो तेजी से आप दीवारों को निर्माण कर सकते हैं...


प्रदर्शन वीडियो

image

संस्करण v1.1 में नई विशेषता अनुप्रयोग के भीतर एक विंडो-कंस्क्ड छवि रीडर के साथ मेल खाती है जो कि छवि आईआईओ के साथ संगत है.

अतः, आप अनुप्रयोग के साथ संपीडित छवि (. ddc) पढ़ सकते हैं:


BufferedImage image = ImageIO.read("image.dfc");


छवि की तुलना.jpg की फॉर्मेट में और अनुप्रयोग के लिए अनुप्रयोग के फ़ॉर्मेट में, आप देख सकते हैं कि गुणवत्ता किसी से भी बदतर है.jpg की तुलना में यह थोड़ा बड़ा फ़ाइल लेता है (जैसे कि उम्मीद है).

लेकिन परिणाम सब पर बुरा नहीं है.

लेकिन, संपीडन के लिए लंबे समय की ज़रूरत पड़ी, इस प्रकार की संपीडन और अनुप्रयोग में इसकी कार्यान्वयन केवल शैक्षिक दिलचस्पी की बात है ।


04/05/2026 - 04/12/2026 .. इस अनुप्रयोग के विकास को ठीक करने के बाद, मैं असली छवियों के साथ परीक्षण करने का प्रस्ताव किया, और मैं इसे एक "4000 x 300 मिमी पिक्सेल के साथ कोशिश की.

मैं कई समस्याओं का सामना करता हूँ:

  • इस प्रक्रिया को विभाजित करने के लिए हमेशा के लिए विभाजित करता है (30,000 त्रिकोण के विस्तार से 40,000 त्रिकोण के लिए), और कि विभाजित शर्त प्रत्येक त्रिकोण में सभी त्रिकोण के लिए दोहराया गया था)
  • स्मृति 23 GB की सीमा तक पहुँचने के बाद चला जाता है कि मैं अपनी प्रणाली पर था. क्योंकि:
    • विभाजित और जोड़ने का परिणाम एक बुलियन सूची में जमा किया गया था (दूर 16 यह है x 3 चैनल x 4000 तत्वों के 2 प्रकार!
    • इसके अलावा, अधिकांश प्रतिनिधि त्रिकोण की पुस्तक के चयन को के रूप में बाहर किया गया था (४: ४,००० तत्वों से अधिक तत्वों) (मुझे लगता है कि एल्गोरिथ्म ओ(n^2) द्वारा इस्तेमाल किया जाता है. अब यह हाथ से बाहर हो रहा है...)
    • और अधिक के लिए, उन गणना तीन चैनलों के समानांतर किया गया!
  • एक बार जब उन समस्याओं को हल किया जाता है, मैं (4000 x 300) छवि को निर्धारित करता हूँ, लेकिन मुझे लगता है कि यह काम पूरा करने के लिए 6 से 8 घंटे लेता है.

और मैं उन्हें हल करने के लिए प्रस्ताव:

  • क्योंकि विभाजित किए जाने का समय, और हल है:
    • मैं त्रिकोण के न्यूनतम आकार को विभाजित करने के लिए, एक चरणिक प्रकार में पिक्सेल की संख्या के लिए। परिणाम की संख्या में त्रिकोण की संख्या में कमी। 4000 से 300 बार त्रिकोण की संख्या 4 से अधिक विभाजित है।
    • इसके अतिरिक्‍त, मैं त्रिकोण के साथ एक सेट बनाता हूँ जो विभाजित मापदंड (उनकी पिक्सेल के मूल्यों के बीच फर्क नहीं करता) के साथ, ताकि उन्हें प्रत्येक भाग में दोहराने के लिए नहीं. अब मक्खी!
  • समस्या:
    • बुलियन सूची में सहेजा गया फूटता है तथा भाग को आगे बढ़ाता है. हल:
      • जैसा कि यह विभाजित होता है, त्रिकोण की संख्या जो आधारित रूप में विभाजित होता है वह वास्तविक रूप से छोटा है, स्मृति जो एक सेट में विभाजित होता है उसे जमा करने के द्वारा सहेजा जाता है.
    • के- एमडिस्काइड्स की मेमोरी (प्रयोगात्मक रूप से ओ( n^2). परिणाम:
      • के रूप में हम 4 से त्रिकोण की संख्या विभाजित किया है..., स्मृति उस एल्गोरिथ्म के लिए जरूरी है, त्रिकोण की इस कमी में 16 के एक कारक द्वारा इस्तेमाल किया स्मृति को विभाजित करना शामिल है।
      • समानांतर में तीन केमाइड ( प्रत्येक चैनल के लिए एक). परिणामः
        • हम विभिन्न ढंग से त्रिकोण की गणना करते हैं और कोड-बुक के लिए अधिकतर ईमेल त्रिकोण के चयन (के-एम्डाइड के साथ).
      • हमने 48 केमाइड के लिए आवश्यक स्मृति विभाजित की है!
  • "सही" छवि के साथ प्रक्रिया समय हमेशा के लिए लेता है (उदाहरण के लिए उदाहरण छवि का संपीडन 3 से 8 घंटे के बीच होता है) प्रत्येक चैनल के लिए. समाधान:
    • थ्रेड कॉन्फ़िगर करने योग्य होने वाली संख्या बनाइए. (अपनी तंत्र को 23 थ्रेड (मेरे तंत्र को 24 कोर) कॉन्फ़िगर करने के द्वारा, प्रक्रिया का समय साढ़े तीन घंटे तक कम हो जाता है.
  • समाधान का प्रभाव:
    • 4 द्वारा त्रिकोण की संख्या को 4 से विभाजित करने का प्रभाव निश्चित रूप से समझौता छवि की गुणवत्ता की एक उल्लेखनीय कमी में परिणित होता है. लेकिन इतना प्रस्ताव के साथ, यह महत्वपूर्ण नहीं है.
    • जब त्रिकोण की संख्या को 4 से विभाजित करता है तो यह संपीडित फ़ाइल के आकार को भी विभाजित करता है, जिन्हें 4 के क्रम से भी विभाजित किया जाता है.

मैं यह भी संकल्प करता हूँ कि संपीडित फ़ाइल के आकार को कम करने की कोशिश करें, जानकारी को भंडारित करने के लिए पुनः लोड किया जाए.

विचार है कि त्रिकोण की निर्देशिका सूची में सभी के ऊपर सूचित करना है जो हर एक हिस्से में विभाजित होता है, जिसका मूल छोटा कोडिंग प्रति एक बिट का उपयोग करने के लिए था, यदि वह विभाजित होता या नहीं.

मैं एक एल्गोरिथ्म की योजना बना उन निर्देशिका सेट के प्रत्येक स्टोर के लिए आवश्यक आकार को कम करने के लिए कोशिश करने के लिए एक एल्गोरिथ्म.

मुझे लगता है कि यह बर्बाद नहीं है... अगर आप उत्सुक हैं इस वेबसाइट पर मैं महत्वपूर्ण मुद्दों को बताता हूँ कि मैं किस पर भरोसा किया है.

हालांकि शायद एक सामान्य नुकसानकर्ता के लिए देखना अधिक लाभप्रद होता...... ज़िप या 7z की तरह और इसे संपीडित फ़ाइल की वैश्विकता पर लागू करें... शायद अगले समय के लिए.


प्रसव के अंतिम संस्करण में, एक कमांड इंटरफेस अनुप्रयोग शामिल है जिसमें एक अभिलेख बनाया गया है जो कोडर के कम समाधानित संस्करण के साथ, जो कि कोडर के नवीनतम संस्करण में, जो कि सीमित जगह लेता है.

मूल एनकोडिंग के साथ फ़ाइलों के जोड़े पर इस छोटा सा अनुप्रयोग का उपयोग किया जा रहा है (3143 में से एक और 4000x300), यह है कि उन में 4% द्वारा कम किया गया है.

वीडियो

डाउनलोड्स