اطلاعیه

Collapse
No announcement yet.

تبدیل Wavelet

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

    #31
    پاسخ : کتابخونهآ‌ برای Wavelet transform --- برای استفاده در image processing

    سلام
    بنده باهاشون کار نکردم
    اما اون منبع اول رو نگاه کرده بودم
    و دیدم که بسیار خوب توضیح داده
    و مهمتر از همه اینکه مثال های عملی گذاشته
    کد هم قرار داده.
    شما میتونی برنمه های خودتو امتحان کنی

    فقط توجه داشته باشید که برنامه ها رو در لینوکس اجرا کرده
    اما زبان برنامه نویسیش همون ++C هست

    :read:
    1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
    2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
    3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

    دیدگاه


      #32
      پاسخ : کتابخونهآ‌ برای Wavelet transform --- برای استفاده در image processing

      بعد از 5 ساعت بالاخره Add شد

      دیدگاه


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

        سلام.امکانش هست که توضیحی در مورد روش های کاهش نویز با ویولت هم بدین؟و اینکه نقش thresholding تو این مبحث چیه؟

        دیدگاه


          #34
          پاسخ : کاربرد 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






          توضیحی که دادین خیلی کامل بود امکانش هست درباره دینویزینگ با ویولت هم توضیح بدین؟من تازه کارم و باید برای پروژه درسم یه مقاله رو شبیه سازی کنم ولی اصلن نمیدونم از کجا باید شروع کنم.میتونین کمکم کنین؟

          دیدگاه


            #35
            پاسخ : تبدیل Wavelet

            سلام نمونه برداری فشرده یا compressed sensing یهنی اینه به جای ارسال سیگنال با n مولفه سیگنالی را ارسال کنیم با m مولفه که n خیلی از m کوچکتر است این در صورتی است که بتوان سیگنال اصلی را با ارسال m نمونه از آن بازیابی کرد با دقت خوب. یعنی نمونه برداری و فشرد سازی به طور همزمان انجام بشه . در روش های قبلی اول از کل سیگنال نمونه بردارس می کردیم بعد بزرگترین ضرائب را بر می داشتیم و کوچکترین ضرائب را صفر در نظر می گرفتیم یعنی نیاز داشتیم که کل نمونه های سیگنال را یک جا داشته باشیم ولی در نمونه برداری فشرده میایم و از سیگنال نمونه هایی را بر می داریم که با آن نمونه ها می توان سیگنال را بازیابی کرد .
            یه سوال از همه داشتم کسی می تونه کمکم کنه ؟
            یه سیگنالی داریم که ازش تبدیل ویولت دابیچز گرفتیم تومتلب که دستورش را وارد می کنم ضرائب ویولت رو میده ولی من دنبال ماتریس بردار های پایه می گردم . مثلا می دونیم که هر سیگنال تک بعدی با طول محدود در فضای R که N بعدی است را می توان توسط ترکیب خطی بردار های پایه در ضرائبی نشان داد . من دنبال اون بردار های پایه میگردم تو متلب . کسی می تونه کمک کنه؟

            دیدگاه


              #36
              پاسخ : تبدیل Wavelet

              سلام ممنون از توضیحاتتون من میخوام تبدیل ویولت رو برای سیگنال استفاده کنم نه تصویر اگر امکانش هست یخورده واسم توضیح بدین ممنون میشم یعنی یه سیگنال رو میفرستیم و به صورت یه نمودار درنظر میگیریم میتونم از تبدیل و یولت استفاده کنم؟

              دیدگاه


                #37
                پاسخ : کتابخونهآ‌ برای Wavelet transform --- برای استفاده در image processing

                سلام امکانش هست درباره استخراج ویژگی از تصاویر با تبدیل ویولت توضیح بدید

                دیدگاه


                  #38
                  پاسخ : کاربرد 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

                  سلام یک سئوال واسم پیش اومده تبدیل wavelate با تبدیل فوریه میشه مقایسه کرد !!!!!!!!!!!!؟؟؟
                  تبدل ویولت تو حوزه فرکانس فرکانسهای پایین پایین ( LL) را در هر مرحله (البته ممکن است قسمتهای دیگر را هم بردارد نوعهای دیگش) انتخاب میکند که همین حوزه فرکانس با اسنفاده از تبدیل فوریه (یا dft) بدست می آید
                  پس تبدیل فوریه ابزاری برای گرفتن تبدیل ویولت است
                  اَشهَدُ اَنَّ اَمیرالمُومِنینَ عَلیّاً وَلیُّ الله
                  لبیک یا علی (ع)
                  لبیک یا حسین (ع)
                  لبیک یا آقام ابولفضل عباس (ع) علمدار کربلا
                  لبیک یا امام صاحب الزمان (ع)

                  دیدگاه

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