اطلاعیه

Collapse
No announcement yet.

تبدیل Wavelet

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تبدیل Wavelet

    سلام.کسی در مورد کاربرد ویولت(wavelet) در پردازش تصویر یه مقاله خوب داره؟اگه فارسی باشه خیلی عالیه

    #2
    پاسخ : کاربرد Wavelet

    مقالات چندمین همایش بینایی ماشین مشهد

    فایل های پیوست شده
    به دلیل رعایت نکردن قوانین ، امضا ویرایش شد.

    دیدگاه


      #3
      پاسخ : کاربرد Wavelet

      سلام
      من خیلی تازه کارم. می خوام تو مطلب با wavelet کار کنم. از چه دستوراتی تو دمو یا تو خود پنجره اصلی استفاده کنم؟

      دیدگاه


        #4
        پاسخ : کاربرد Wavelet

        نوشته اصلی توسط mbsh
        سلام
        من خیلی تازه کارم. می خوام تو مطلب با wave late کار کنم. از چه دستوراتی تو دمو یا تو خود پنجره اصلی استفاده کنم؟
        سلام ....................

        منظورتون رو ممکنه کمی واضحتر بفرمایید؟ دقیقا میخواید چیکار کنید؟ ممنونم ..
        دوستان! مدتی کمتر به سایت میام ..

        دیدگاه


          #5
          پاسخ : کاربرد Wavelet

          ممنون از توجهتون.
          می خوام یه تصویر رو بگیرم و بعد با wavelet کد و دیکدش کنم.
          اصلا نمی دونم چه کار کنم. :cry2:

          دیدگاه


            #6
            پاسخ : کاربرد Wavelet

            ببخشید یه سئوال دیگه هم داشتم:
            بلاک بندی ماتریس یه عکس ر و چه جوری باید انجام بدم؟
            مثلا من می خوام یه ماتریس 100 در 100 رو به 10 تا ماتریس 10 در 10 تبدیل کنم.
            بازم ممنونم.

            دیدگاه


              #7
              پاسخ : کاربرد Wavelet

              نوشته اصلی توسط mbsh
              ممنون از توجهتون.
              می خوام یه تصویر رو بگیرم و بعد با wavelet کد و دیکدش کنم.
              اصلا نمی دونم چه کار کنم. :cry2:
              سلام ...................

              بیایید یک بار اطلاعاتی که در مورد Wavelet داریم رو باهم دوره کنیم .. شما شروع کنید .. منتظر میمونم .. موفق باشید ..
              دوستان! مدتی کمتر به سایت میام ..

              دیدگاه


                #8
                پاسخ : کاربرد Wavelet

                نوشته اصلی توسط mbsh
                ببخشید یه سئوال دیگه هم داشتم:
                بلاک بندی ماتریس یه عکس ر و چه جوری باید انجام بدم؟
                مثلا من می خوام یه ماتریس 100 در 100 رو به 10 تا ماتریس 10 در 10 تبدیل کنم.
                بازم ممنونم.
                سلام ..................

                شما میتونید حلقه های 10 تایی تعریف کنید و با اونها ماتریس تصویرتون رو اسکن کنید .. بعد نتایج هر مرحله از مراحل 10 گانه رو توی یه ماتریس جدا ذخیره کنید .. موفق باشید ..
                دوستان! مدتی کمتر به سایت میام ..

                دیدگاه


                  #9
                  پاسخ : کاربرد Wavelet

                  من فقط می دونم که ویولت یه روش برا فشرده سازیه و بهتر از Dct هست .و دو حالت داره و ضرایبش اینته و یه تفاوت هاییشو هم با mpeg رو می دونم.
                  ممنون می شم اگه شما اطلاعات کامل تر رو بهم بگید و نحوه کار با دستوراشو و هم فشرده کردن عکسو برام بگید.

                  دیدگاه


                    #10
                    پاسخ : کاربرد Wavelet

                    در مورد سئوال بعدی هم یعنی توی یه حلقه ی for که از 1 تا 10 هست بگم 10 تا درایه ی اول سطری و ستونی رو بگیره و نتیجه رو توی یه ماتریس جدیدی که تعریف کردم بریزه و خود این حلقه هم دوباره 10 بار تکرار بشه؟
                    بعد اسکن تصویر تو متلب یعنی چی؟
                    واقعا از کمکتون ممنونم.

                    دیدگاه


                      #11
                      پاسخ : کاربرد Wavelet

                      ببخشید که این سئوالو هم این جا می پرسم چون جای دیگه دیروز پرسیدم وهنوز کسی بهم جواب نداده.(شرمنده)
                      دستور تبدیل فرمت rgb به yuv چیه؟ چون تو مطلب که سرچ کردم ycbcr اومد و فکر کنم نوشته بود مثل همند. ولی وقتی من نوشتم rgb2yuv ارور داد. مشکل از کجاست؟
                      خیلی ممنونم واقعا.

                      دیدگاه


                        #12
                        پاسخ : کاربرد Wavelet

                        نوشته اصلی توسط mbsh
                        در مورد سئوال بعدی هم یعنی توی یه حلقه ی for که از 1 تا 10 هست بگم 10 تا درایه ی اول سطری و ستونی رو بگیره و نتیجه رو توی یه ماتریس جدیدی که تعریف کردم بریزه و خود این حلقه هم دوباره 10 بار تکرار بشه؟
                        بعد اسکن تصویر تو متلب یعنی چی؟
                        واقعا از کمکتون ممنونم.
                        سلام ...................

                        اجازه بدید اینطوری خدمتتون عرض کنم .. شما فرض کنید یه حلقه ی کلی تعریف میکنید که تا 10 بار لوپ میزنه .. بهد زیر حلقه ی این حلقه؛ یه حلقه ی دیگه هست که اون هم به صورت Sequential لوپ میزنه با این تفاوت که هربار که شمارش تموم میشه؛ یه دونه به شماره ی اون لوپ کلی اضافه میشه .. در مورد اسکن کردن تصویر هم اینطور میتونیم بگیم که شما تصویرتون میخونید .. حالا اینجا چطوری میخونید؟ با مربع های 10 در 10 .. یعنی مثل این میمونه که هر بار پازل تصویر شما با یه مربع 10 در 10 تکمیل میشه اونهم برای کامپیوتر .. بقیه ی موارد رو باید فردا روشون صحبت کنیم .. این سیستم متاسفانه متلب نداره .. موفق باشید ..
                        دوستان! مدتی کمتر به سایت میام ..

                        دیدگاه


                          #13
                          پاسخ : کاربرد Wavelet


                          سلام ..................

                          ببخشید اگه دو سه روز نبودم ..

                          خب .. بحثی که شما مطرح کردید در مورد Wavalet بود اما توی یه حوزه ی خاص .. برای همین دیدم شاید بهتر باشه که در ابتدا یک مقدار در مورد کارتون بیشتر صحبت کنیم .. اول باهم یه سری Title هارو بررسی میکنیم و در آخر هم میپردازیم به موارد Programming و پیاده سازی کارتون..

                          قبل از اینکه با مفهوم Wavelet ارتباط برقرار کنیم در مورد یک تعریف خاص باید یه توضیح کوتاه بدیم .. Image Pyramid .. این تعریف چیه؟ ببینید یه بحثی که خیلی توی IP براش ارزش قائل میشن اینه که موقعی که به یه تصویر نگاه میکنیم مجموعه ای از Color و Texture رو به عنوان ماهیت های اصلی تشکیل دهنده ی یک تصویر میبینیم .. حالا هر چی این ویژگی ها با کیفیت تر ارائه بشن میتونیم روی تصویر قضاوت دقیقتر و مطمئن تری داشته باشیم .. یکی از فاکتورهایی که روی تصویر بر این مبنا تعریف میشه Resolution تصویر هست .. بر همین اساس تصاویر دسته بندی میشن .. مثلا یه تصویر با کیفیت تره چون Resolution بالاتری داره و یک تصویر کیفیت کمتری داره چون Resolution پایین تری داره .. حالا فرض کنید بتونیم از یک تصویر پایه‎ Resolution های مختلفش رو داشته باشیم .. اتفاقی که میتونه برامون بیوفته و به عنون یک مزیت مهم مطرح بشه چیه؟ اینه که ما مجموعه ای از Resolution های مختلف داریم منتهی از یک تصویر پایه.. حالا اگه بخوایم روی تصویر قضاوتی داشته باشیم که به Resolution بالا نیاز باشه میتونیم از Plane های رزولوشن بالاتر استفاده کنیم و اگه بخوایم قضاوتی داشته باشیم که نیاز به رزولوشن پایین داره میتونیم از Plane های رزولوشن پایین تر استفاده کنیم ..

                          این نکته توی تحلیل و پردازش تصویری که داریم خیلی به ما کمک میکنه و تنها ایده ای هم که بهش وابسته هست همون تشکیل Pyramid هست .. پس به عنوان نتیجه میتونیم اینطور بگیم که توی این Pyramid یه تصویر به عنوان Image Base وارد دیاگرام میشه و بعد با اجرای Iterative Operation های پی در پی هرمی ساخته میشه که هرچی به سمت راس اون میریم Resolution کمتر میشه .. Order این کاهش هم 2*2 هست .. یعنی هر Level با Level قبلیش در سایز 2*2 تفاوت داره .. خیلی دقیقتر بخوام بگم اینطوری میشه که عدد Level فرضی J شما برابر خواهد بود با LogN در مبنای 2 .. برای مثال اگه سطحBase Image شما J و Resolution اش 512*512 باشه سطح J-1 که در واقع یک Iterate بعد هست Resolution اش برابر 256*256 هست .. یعنی سایز Level 2*2 تا کم شده .. انتهای اجرای این Operation حالتیه که به راس هرم برسیم و اونجا جاییکه که Resolution دیگه قدرت سرشکن شدن نداره‎ یعنی سایز تصویر برابر میشه با 2*2 ..



                          جزئیات بیشتر این مبحث رو میذاریم کنار به این دلیل که شاید به ادامه ی کار زیاد مرتبط نباشه .. فقط یه نکته ی دیگه رو هم بگم که ذهنمون رو بیاره توی حیطه ای که میوایم ازش صحبت کنیم .. فرض کنید این Image Pyramid ساخته شده و Level های مختلف اون رو تشکیل دادید .. این هرم از نظر Resolution به چه ترتیبه؟ آیا میتونیم بگیم که Resolution خاصی داره؟ میتونیم استدلال کنیم که یک Resolution خاص بهش اختصاص بدیم؟ جواب این سوالات منفیه .. علت اونهم اینه که از نظر Resolution به این هرم بک اسم خاص رو نسبت میدن و اون Multiresolution هست .. یعنی به ازای هر Level خاص‏ یک Resolution خاص برای اون تعریف میشه .. حالا این میتونه کجا به ما کمک کنه؟ یه بار دیگه مطالبی رو که گفتیم توی ذهنتون مرور کنید .. مورد خاصی به ذهنتون نمیرسه؟ درسته .. میتونیم با دید compression بریم سراغ موضوع .. اما چطور؟ اگه شما Image Pyramid رو تشکیل بدید و تا apex اون مراحل رو دنبال کنید عملا یه Pyramid کامل ساختید .. ورودی این Pyramid چیه؟ یه Base Image اولیه .. Level های بالاتر چی هستن؟ approximation هایی از همون تصویر منتهی در Scale Resolution کمتر .. (به اندازه ی 2*2 در هر مرحله..) حالا فرض کنید از یه مقدار P به بعد (منظورم به بالا هست..) این Pyramid رو ببینیم .. یعنی به نحوی Pyramid مون رو Clutter میکنیم .. با این کار انگار از یک سری Levelهای High Resolution تر صرف نظر کریم و همین صرف نظر کردنه که مارو به سمت یه کاربرد خاص حرکت میده .. Image Compression .. یعنی اومدیم چیکار کردیم؟ با Clutter کردن بدنه ی Pyramid مون از Resolutionهای بالاتر صرف نظر کردیم و این کاری که میتونه توی Representation های بعدی کاربرد زیادی داشته باشه ..

                          اگه بخوایم بلوک دیاگرام ساخت Image Pyramid رو ببینیم میتونیم به شکل زیر استناد کنیم ..



                          چند تا توضیح در مورد دیاگرام بالا رو باهم بررسی میکنیم و از وارد شدن به جزئیات هم اجتناب .. ببینید دیاگرام بالا یک ورودی داره که همون Base یا قاعده ی هرم مارو تشکیل میده (برخوردار از Level J ..) و در مقابل دوتا خروجی داره اونهم برای دوسطح مختلف .. یکی سطح J-1 و دیگری هم J .. حالا جریان چیه؟ تصویر سطحJ وارد الگوریتم میشه و باید به کاهش رزولوشن برسه .. در ابتدا از یک طبقه فیلتر عبور میکنه تا بتونه تا حدودی اطلاعات خودش رو تقریب بزنه .. بعد از اون محله ی Subsampling انجام میشه که طی اون به واسطه ی DownSampling به اندازه ی 2*2 از سایزش کم میشه .. حالا اینکه در هنگام کم شدن سایز به چه ترتیب اطلاعات پیکسل ها تغییر میکنه دیگه بر میگرده به همون مرحله ی انتخاب Approximation Filter .. مثلا فرض کنید فیلتر انتخابی ما Gaussian باشه .. اتفاقی که میوفته چیه؟ هرم شما حالت Gaussian Pyramid پیدا میکنه به این معنا که هر Level با یک Approximation ای خاص (که متد Gaussian باشه Resize میشه..) نمیدونم با دستور imresize توی متلب کار کردید یانه؟ اگه یه تصویر به عنوان آرگومان وودی برای اون تعریف کنیم اتفاقی که میوفته چیه؟ دستور Error میده..! چرا؟ برای اینکه متد Resizing خیلی مهمه .. حالا اتفاقی که توی Resizing میوفته چیه؟ شما باید فاصله ی پیکسل هارو کم (یا زیاد..) کنید اونهم با متدی خاص .. مثلا یه متد استفاده از روش Bicubic هست .. یکی دیگه بر اساس Bilinear کار میکنه و به همین ترتیب میرن جلو .. از بحث دور نشیم .. اینجا بودیم که باید با استفاده از یک Approximation Filter تصویرمون رو Resize میکردیم .. حالا ممکنه سوال کنید که چرا فیلتر بذاریم؟ مستقیم سایز رو کم کنیم دیگه؛ چه اشکالی داره؟

                          خب ببینید درسته که ممکنه در Resolution های بالاتر که طبیعتا سایز بزرگتری هم دارن مشکلی پیش نیاد (مثلا در تغییر سطح از J-1 به J-2 با فرض J=512 ..) ولی توی Level هابی بالای هرم اتفاقی که میوفته چیه؟ Aliasing .. یعنی عملا اطلاعات Levelها توی مراتب بالای هرم یه جور بی ارزشی رو در ارائه ی اطلاعات مهم تصویر در اختیار ما قرار میده .. اگه قرار بود با فیلتر اطلاعات پیکسلی به صورت ارزش گذاری شده مشخص بشن در اینجا دیگه این اتفاق نمیوفته و ما عملا Representation ای که از تصویر در اون level انجام دادیم کاملا بی نتیجه و بیهوده و کم استفاده هست .. پس ارزش Approximation Filter خیلی زیاده ..

                          مرحله دوم چیه؟ خروجی های مرحله ی قبل رو Upsample میکنه به این معنا که سایز کوچک شده ی خروجی مرحله ی قبل رو مجدد بزرگ میکنه (با Scale عددی 2*2 ..) و بعد هم برای بهبود هر چه بیشتر وضعیت این کار رو با Interpolation Filter انجام میده .. در انتها هم خروجیش رو از Level J Input Image کم میکنه و داده ی نهایی که ارائه میده Prediction Residual هست .. یعنی چی رو به ما میده؟ اون اختلافی که بین واقعیت و پیش بینی ما وجود داره.. پس داریم چیکار میکنیم؟ از روی سطح قبلی یک پیش بینی انجام میدیم برای سطح اولیه (یه دونه ی قبلی ..) پس چی شد؟ اومدیم و گفتیم که اگر بدونیم که خروجی سطح J-1 میشه Approximation ما میتونیم از روی اون، سطحی که این از روش ساخته شده رو با یه فرآیند Interpolation پیش بینی کنیم .. حالا با این دید فکر میکنید خروجی این دیاگرام چی باشه؟ دو تا Pyramid .. یکی هرم Approximation های سطوح Image Pyramid هستن و دیگری هم حاصل تفاوت بین پیش بینی هایی که انجام دادیم و ورودی اولیه .. یه نکته ی خیلی مهم که باید به اون دقت کنید اینه که مرحله ی اول روی سطوح J-1 تمرکز داشت (یه Level قبل تر از Input Base Image ..) ولی مرحله ی دوم روی پیش بینی سطح J متمرکز میشد یعنی یه جورایی میخواست با یه Interpolation خاص، آب رفته رو به گودال برگرونه .. این نکته توی مرحله ی سوم خیلی تعیین کننده هست..

                          مرحله ی سوم چیه؟ در واقع استفاده از دو خروجی ای که داریم اما به چه ترتیب؟ اگه ما تفاوت دو تا خروجی رو به دست بیاریم به چی رسیدیم؟ اطلاعاتی که در Level J وجود داره .. چرا اینطوریه؟ دلیلش روی توضیحات دو مرحله تقریبا مشخصه .. اگه مرحله ی اول رو بگیریم تقریب سطح J-1 و مرحله ی دوم رو هم بگیریم خطای پیش بینی سطح J اونوقت تفاوت این دوتا چی رو به ما میده؟ اطلاعات ذخیره شده در سطح J .. حالا هرچی این Approximation و Interpolation از نظر Quantization بهینه تر باشه، این اطلاعات به واقعیت سطح J نزدیکتره .. فکر کنم مطالب اصلی این بحث رو باهم دوره کردیم در نتیحه از این بحث میگذریم تا در ادامه بتونیم از نتایجش استفاده کنیم ..

                          اما در مورد Wavelet بحث واقعا طولانیه .. ولی به صورت خیلی کلی میتونیم اینطور بگیم که Wavelet به عنوان یک Transformation مطرح شد با این هدف که بتونه به پردازش سیگنال کمک کنه .. نگاهی که Wavelet به مساله ی سیگنال داشت یک مقدار با نگاه فوریه مشترک بود و البته از جنبه ی اجرا با اون کاملا متفاوت.. فوریه سیگنال رو چطور ارزیابی میکرد؟ میومد و میگفت که هر سیگنالی داشته باشیم میتونیم اون رو به صورت ترکیبی از توابع سینوسی و کسینوسی بنویسیم و نشون داد که با این روش، میشه به راحتی تقریب مناسب و دقیقی برای سیگنال در نظر گرفت .. بسطی که فوریه برای تبدیلش تعریف کرده بود همگرایی فرم سیگنال ساخته شده رو به سیگنال اصلی نشون میداد و ادعا میکرد که میشه تمام عملیات محاسباتی رو بر روی سیگنال انجام داد .. چرا که عناصری که سیگنال رو باهاشون ساخته بود، سینوس و کسینوس بودن .. ایده ی ساختن سیگنال با استفاده از ابزارهای دیگه که فابل شناسایی ما هستن فکری بود که برای تبدیل Wavelet هم به کار گرفته شد .. توی این تبدیل به جای اینکه از توابع سینوس و کسینوس استفاده بشه از شکل موج های خاص استفاده میشد .. این شکل موج ها یه خاصیت خیلی مهم داشتن .. Periodic و Limited Duration .. این خاصیت اونها باعث شده بود که که از نظر انعطاف و کاربرد از فوریه سبقت بگیرن به عنوان یه متد ارزشمند در تبدیل های سیگنالی به کمک پردازش سیگنال بیان .. نوع انتخاب این موجک ها و اینکه چطور اونهارو تعریف میکنن مباحثیه که در حوزه ی ریاضیات قرار میگیره و من زیاد نمیتونم اونهارو باز کنم (نه فرصتش رو داریم و نه من اطلاعات کافی..) برای همین به مفهوم Wavelet بسنده میکنیم و ادامه ی مطالب رو با این فرض که اونهارو بعدا میخونیم دنبال میکنیم (دونستن اونها تاثیر زیادی روی ادامه ی بحث نمیذاره .. مطمئن باشید ..) .. در مورد Wavelet یه Forum خیلی خوب هست که میتونه خیلی بهتون کمک کنه .. هم مطالبش هم بحث هایی که اونجا شده و هم منابعی که معرفی شده..

                          Wavelet Forum
                          http://www.wavelet.org/phpBB2/viewforum.php?f=165

                          Gallery Reference
                          http://www.wavelet.org/phpBB2/gallery.php

                          اما اصل سوالتون .. شما توی یکی از پست هاتون به سه تا کلمه اشاره کردید .. Coding .. Decoding .. Compression .. خب حالا باید روی اینها صحبت کنیم ببینیم به چه ترتیبی میتونن با هم مرتبط بشن؟

                          یکی از زمینه های که در دنیای IP وجود داره بحث Image Compression هست .. این حوزه خیلی متدهای متنوعی داره و در زمینه های مختلف کاربرد.. اما ارتباطی که این حوزه با Wavelet داره به چه ترتیبه؟ اگه بخوایم از این دریچه به موضوع نگاه کنیم باید یه بخش کوتاه دیگه هم تعریف کنیم ..

                          Lossy Image Compression : همون طور که از اسم این شاخه هم پیداست این شاخه روی فشرده سازی تصویر تمرکز میکنه اونهم نوع خاصی از اون .. یعنی Lossy .. اولا فرق Lossy با Lossless رو باهم خیلی کوتاه بررسی کنیم .. در هر فرآیند فشرده سازی اتفاقی که میوفته خداحافظی با بخش هایی از تصویره که حاوی اطلاعات کم ارزش تری هستن .. حالا این اطلاعات کم ارزش موقع فشرده سازی باید حذف بشن تا بتونیم بگیم تصویر اولیه فشرده شده .. در نتیجه اگه بتونیم متدی به کار بگیریم که در طی اون اطلاعات به گونه ای حذف بشن که بشه دوباره اونهارو برگردوند میگیم فشرده سازیمون Lossless بوده .. یعنی اطلاعاتی از دست نرفته .. ولی اگه اطلاعات به گونه ای از دست بره که دیگه نشه اونها رو بازیابی کرد میگیم فشرده سازیمون Lossy بوده .. یعنی یک سری اطلاعات رو از دست دادیم .. PCA مثلا یه متدیه که اگه باهاش تصویرمون رو فشرده کنیم دیگه نمیتونیم بازیابی اطلاعات رو انجام بدیم .. یعنی Lossy هست ..

                          به طور کلی Lossy Image Compression به سه دسته ی کلی تقسیم میشه ..
                          اولین اونها Lossy Predictive Coding هست ..
                          دومین اونها Transform Coding هست ..
                          سومین اونها Wavelet Coding هست ..

                          اما تفاوتی که بین دو دسته ی اول و دوم وجود داره چیه؟ دسته ی اول روی اطلاعات پیکسل ها بحث میکنن و عملیات خودشون رو به صورت مستقیم روی پیکسل ها انجام میدن در حالیکه دسته ی دوم نگاهشون نسبت به فشرده سازی یک مقدار فرق میکنه .. اونها میان و یه تبدیل بازگشت پذیر رو روی تصویر انجام میدن .. بعد ضرائب حاصل از این تبدیل رو استخراج میکنن و یک Mapping بین ضرائب و تصویر انجام میدن (در واقع تصویر رو با اون ضرایب بیان میکنن..) .. بعد این ضرائب رو Quantize میکنن و در انتها هم این مقادیر Quantize شده رو به صورت Bit کد میکنن .. ما روی دسته ی اول اصلا صحبت نمیکنیم و دسته ی دوم رو هم فقط برای رسیدن به یک نتیجه ی خاص بررسی میکنیم تا بتونیم از اون نتیجه برای دسته ی سوم استفاده کنیم ..

                          اما مراحلی که در دسته ی دوم اتفاق میوفته دقیقا چیه؟
                          اول Subimage Decomposition اتفاق میوفته ..
                          دوم Transformation اتفاق میوفته ..
                          سوم Quantization اتفاق میوفته ..
                          چهارم Coding اتفاق میوفته ..

                          مراحل بالا تقریبا روند فعالیت این دسته رو مشخص میکنه .. اول که تصویر N*N اولیه باید شکونده بشه به تصاویر n*n .. این کار برای این انجام میشه که بتونیم تبدیلمون رو روی این subimage ها داشته باشیم .. بعد از این مرحله نوبت اجرای تبدیل هست .. هدف اصلی Transformation اینه که بتونیم پیکسل های هر subimage رو به نحوی Decorrelate کنیم یا اینکه بتونیم یک سری اطلاعات بخصوص رو توی کمترین تعداد ضرائب إ¾Pack کنیم .. اتفاق بعدی چیه؟ این ضرائب رو Quantize کنیم .. این مرحله یک نتیجه ی خاص داره و اون اینکه یک سری از ضرائب که دارای تاثیر کمتری هستن به صورت خودکار حذف میشن .. این ضرایب همون هایی هستن که در Reconstruction تصاویر شکسته شده (همون Sumimage هامون..) کمترین اثر و نقش رو دارن .. دلیلش هم اینه که اطلاعات زیادی از تصویر رو در خودشون ذخیره نکرن .. بلوک دیاگرامی که این دسته بر مبنای اون کار میکنه هم به صورت زیره ..



                          دسته ی سوم که در حقیقت جواب سوال شما هم هست wavelet Coding هست .. این دسته خیلی شبیه دسته ی دوم هست با این تفاوت که توی بلوک دیاگرامش یک مرحله حذف شده که در ادامه علت اون رو هم بررسی میکنیم .. روندی که در این دسته هم دنبال میشه اینه که بتونیم با استفاده از یه Transformation خاص (که در حقیقت همون Wavelet Transform هست..) بتونیم حریمی قائل بشیم بین پیکسل های یه تصویر که میتونن بر حسب ارزش و اعتبار پیکسلی دسته بندی بشن .. این Decorrelate کردن خیلی بهتر و دقیقتر از موقعی عمل میکنه که ما بخوایم روی خود پیکسل ها به صورت مستقیم قضاوت کنیم .. با این عمل اتفاقی که میوفته اینه که ضرایب پرارزش مشخص میشن و در هنگام Quantize کردن میبینیم که ضرایب کم ارزش از بین میرن .. این اتفاق میتونه به صورت manual توسط کاربر هم بیوفته و در واقع کاربر بر حسب یه Threshold خاص بتونه Truncate کنه ضرایبی رو که خیلی ارزششون کمتره و به این ترتیب روال فشرده سازی رو انجام میده ..

                          حالا تفاوتی که در بلوک دیاگرام بود و ما هم ازش صحبت کردیم چیه؟ اون بلوک اول از روال مراحل حذف شده یعنی دیگه Subimage Reconstruction نداریم .. حالا علت این امر چیه؟ دقیقا علتش بر میگرده به خاصیت ذاتی Wavelet .. از نظر محاسباتی کار با توابع Wavelet و اجرای Wavelet Transform بسیار بهینه و کم هزینه هست .. از نظر Locality هم تبدیل Wavelet کاملا Local هست و این امر به این دلیله که ساختار تشکیل دهنده ی Wavelet یک سری موجک هایی هستن که Duration محدودی دارن و دیگه نیازی نیست اونها رو بشکونیم چراکه خودشون شکسته شکسته و جزء جزء هستن و به همین ترتیب هم هست که میتونن یه سیگنال رو شبیه سازی کنن .. دقیقا اولویتی که این تبدیل نسبت به DCT داره هم در همین هست .. DCT اون بلوک اول رو داره و به این واسطه از تقریب منایب در Compression Ratio های بالا برخوردار نیست در حالیکه Wavelet به دلیل حذف اون بخش Subdivision در Compression Ratio های بالا از Approximation بهتری برخوردار هستن .. به همین دلیل هم هست که RMS Error تبدیل Wavelet خیلی پایین تر از RMS Error تبدیل DCT هست ..

                          رفتاری که در Wavelet Coding انجام میشه به این ترتیبه که با انتخاب توابع بخصوصی که گفتیم شرحش به مطالب ریاضی بر میگرده Level By Level ضرایب حاصل از اعمال تبدیل رو Prun (هرس..) میکنه .. یعنی اول Compression Ratio مثلا 67:1 هست .. بعد میشه مثلا 128:1 و همینطور تا آخر .. یعنی در واقع انتخاب اون توابع به صورت سطح به سطح و مرحله به مرحله انجام میشه .. یعنی نگاه Wavelet در Compression خیلی شبیه نگاه Multiresolution هست با این تفاوت که اونجا Trancate به صورت Manual انجام میشد و اینجا به صورت Selective اون هم بنابه تعریف Wavelet برای اعمال تبدیل .. لینک های زیر رو هم میتونید برای پیاده سازی الگوریتم انتخاب کنید .. امیدوارم توضیحات براتون تکراری نبوده باشه .. موفق باشید ..

                          Wavelet Coding Document
                          http://www.geoffdavis.net/papers/accsc.pdf

                          Wavelet Page
                          http://www.amara.com/current/wavelet.html#Wavelinks

                          Wavelet Image Compression

                          http://www.geoffdavis.net/dartmouth/wavelet/wavelet.html


                          What is wavelet theory
                          http://www.faqs.org/faqs/compression.../preamble.html

                          Source codes
                          http://eeweb.poly.edu/~onur/source.html

                          WAVELET-BASED IMAGE COMPRESSION
                          http://www.owlnet.rice.edu/~elec301/...p/results.html

                          Image Compression
                          http://www.cbloom.com/src/index_im.html

                          دوستان! مدتی کمتر به سایت میام ..

                          دیدگاه


                            #14
                            پاسخ : کاربرد Wavelet

                            اول بگم دلم نیومد فقط دکمه تشکر را بزنم برای همین اینجا هم از حسام الدین خیلی تشکر می کنم
                            در ضمن می خواستم بدونم شما در مورد copressed sensing اطلاعاتی دارید اگر دارید می شه یک خورده مطالب ریاضی آن را توضیح دهید.
                            چه خوش است زر خالی که به آتش اندر آيد
                            چو کند درون آتش هنر و گهرنمائی
                            مگريز ای برادر تو ز شعله های آذر
                            ز برای امتحان را چه شود اگر درآئی
                            به خدا ترا نسوزد رخ تو چو زر فروزد
                            که خليل زاده ای تو زقديم آشنائی چو خليل رو در آتش که تو خالصی و دلپاک در خيبر است برکن که علی مرتضائی.

                            دیدگاه


                              #15
                              پاسخ : کاربرد Wavelet

                              نوشته اصلی توسط bidgol
                              اول بگم دلم نیومد فقط دکمه تشکر را بزنم برای همین اینجا هم از حسام الدین خیلی تشکر می کنم
                              در ضمن می خواستم بدونم شما در مورد copressed sensing اطلاعاتی دارید اگر دارید می شه یک خورده مطالب ریاضی آن را توضیح دهید.
                              سلام ...................

                              راستش من زیاد تخصصی توی زمینه ی Compression کار نکردم و فکر نکنم بتونم زیاد بهتون کمک کنم .. اگه تونستم اطلاعات بگیرم؛ حتما نتیجه ی اون رو خدمتتون اعلام میکنم .. موفق بشید ..
                              دوستان! مدتی کمتر به سایت میام ..

                              دیدگاه

                              لطفا صبر کنید...
                              X