اطلاعیه

Collapse
No announcement yet.

Active Contour Models

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

    #16
    پاسخ : Active Contour Models

    سلام
    متشکرم از توجهتون .من یک مقاله ازIMPROVED gvf دیدم که میتونخ خیلی خوب رگها را لبه یابی کنه تصاویرش خیلی شبیه تصاویر خودم بود . من این مقاله را براتون میفرستم ممنون میشم یه نگاه بهش بندازید . حقیقتش دست متوجه نشدم چه تغییری روی GVF داده بود .
    دوم اینکه ممنون میشم یک نمونه سورس کد مطلب از GVF برام بزارید با نحوح برنامه نویسیش تو مطلب آشنا بشم . نمیدونم چطور میشه در مطلب با SNAKE ها کار کرد . البته قبلا یه فایلی گذاشتید اما من هر کاری میکنم نمیتونم به اون فروم که آدرسشو دادید دسترسی پیدا کنم . خطا میده ممنون میشم همینجا فایلشو دوباره بزارید

    دیدگاه


      #17
      پاسخ : Active Contour Models

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

      GVF خوبه ولی یه اشکالایی داره که نمیشه همینطوری ازشون گذشت .. ولی شاید اونا یه جاییش رو تغییر دادن که میتونه خوب Detection رو انجام بده .. لینک زیر یه کم در مورد GVF بحث کرده .. میتونید اونو ببینید ..

      http://www.eca.ir/forum2/index.php?topic=21635.0

      البته قبلا یه فایلی گذاشتید اما من هر کاری میکنم نمیتونم به اون فروم که آدرسشو دادید دسترسی پیدا کنم . خطا میده ممنون میشم همینجا فایلشو دوباره بزارید
      من کد رو ضمیمه ی پست کردم .. چرا نتونستید دانلودش کنید؟ مشکل از از کجا بود؟ در ضمن من منتظر میلتون هستم .. در مورد Snake و خانوادشون و کلا کارایی که میشه با مدل های پارامتریک انجام داد؛ یه نفر منهای XU کدهای خیلی خوبی توی این زمینه نوشته و سال 2008 یه تولباکس خیلی خوب از این سری کارا Implement کرد .. Bing بود اگه اشتباه نکنم .. اگه خواستید میتونید طرفای اون تولباکس هم برید .. موفق باشید ..
      دوستان! مدتی کمتر به سایت میام ..

      دیدگاه


        #18
        پاسخ : Active Contour Models

        باز هم سلام و قدردانی فراوان به خاطر توجه و حوصله ای که در پاسخ به خرج میدید
        من پستها را قبلا مطالعه کردم و اون لینک که دو تا سورس کد گذاشته بودید را دنبال کردم اما با این خطا مواجه میشم "موضوع یا انجمن مورد نظر، برای شما محدود می باشد و شما اجازه دیدن آن را ندارید.

        بازگشت" :angry:
        به هر حال ... البته یک با هم تونستم دانلودش کنم اما حاوی یه فایلmatlab به اسم GVFc بود که محتویاتش چیزی نبود!!!!
        اگه لطف کنید برام بذاریدش همین پست ممنون میشم .مقاله را ایمیل کردم به همون آدرس ایمیل قبلی .ممنون میشم یه نگاه بهش بندازید و راهنماییم کنید .
        با تشکر

        دیدگاه


          #19
          پاسخ : Active Contour Models

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

          گه لطف کنید برام بذاریدش همین پست ممنون میشم
          http://www.eca.ir/forum2/index.php?t...9623#msg149623

          من خودم دوبار تستش کردم .. مشکلی نداشت .. باز اگه نتونستید اینارو دانلود کنید؛ بگید تا براتون میلشون کنم .. در مورد اون یکی فایلی که گفتین .. gvfc .. اون فایل خالی نیست .. یه فایل MEX هست که توش GVF ایمپلمنت شده .. یعنی با C نوشتنش .. این کارو میکنن که سرعت اجرای برنامه بره بالا .. پـــس اون فایل موردی نداره .. در مورد مقاله ای که فرستاده بودید؛ من یه نگاه کلی بهش انداختم .. دو تا Paper دیگه درخواست دادم که برام پلود کنن .. در مورد همین Improved GVF .. باید اونارو هم بخونم تا بهتون جواب قاطع بدم .. فعلا نمیتونم نظر صد در صدی بدم .. منتظر باشید تا دوباره برگردم .. موفق باشید ..
          دوستان! مدتی کمتر به سایت میام ..

          دیدگاه


            #20
            پاسخ : Active Contour Models

            سلام
            متشکرم از پاسخ و توجهتون .
            از اینکه لینک را دوباره قرار دادید ممنونم . فایل رو دریافت کردم . اون فایلgvfc را دوباره مطالعه کردم .حق با شماست .یک فایل mex شده با c هست . من یشتر نیاز به فایل مطلب دارم و با زبان سی زیاد آشنایی ندارم

            البته چند فایل از کار C henyang XUدر مطلب جمع آوری کرده و مطالعه کردم تا با نحوه پیاده سازی اکتیو کانتور در مطلب آشنا بشم .
            اون مقاله improved GVF یک نیروی توقف به نیروی خارجی gvf اضافه کرده که اگه از لبه گذشت دیگه سیر تکامل snake ادامه پیدا نکنه و جهت میدان gvf عوض بشه اما نکته مبهم اینه که الگوریتم چطور تشخیص میده از لبه گذشته (لبه را قطع کرده ) ا
            باز هم متشکرم از این همه توجه و علاقه شما به پیگیری و ادامه بحثها .
            همه فعالیتهام متوقف شده بود و با وجود راهنمایی های شما دوباره در یک مسیر مشخص از سر گرفته شد
            تشکرررررر :wow:

            دیدگاه


              #21
              پاسخ : Active Contour Models

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

              کارای XU توی این زمینه کلا خوبه .. مبتکر روش خودش بوده و خودش هم Version های مختلف GVF رو ایمپلمنت کرده .. توی کدهایی که داره یه ورژن 4 هست و یه ورژن 5 .. اونا رو اگه ببینید خیلی کمکتون میکنه .. ایمپلمنت های خوبیه .. اگه پیدا نکردید بگید تا براتون بفرستم .. من مقاله هارو الان دانلود کردم .. میخونم؛ خبر میدم .. موفق باشید ..
              دوستان! مدتی کمتر به سایت میام ..

              دیدگاه


                #22
                پاسخ : Active Contour Models

                سلام.تو یکی از پست ها به خانم بهار گفته بودین یه مقاله هست تو زمینه های level set ها ، مربوط به 2007
                امکانش هست لینکشو بذارید منم استفاده کنم یا واسم میل کنید لطفا؟خیلی از لطفتون ممنون میشم.
                ایمیل من apb848@gmail هستش.

                دیدگاه


                  #23
                  پاسخ : Active Contour Models

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

                  خـب، من اون مقاله ها رو خوندم .. متوجه شدم تقریبا چی شد .. یه مدت بود از بحث این Snake ها اومده بودم بیرون .. این تاپیک باعث شد که دوباره توی حال و هواشون قرار بگیرم .. یه چندتا مطلب خیلی کوتاه هست که بهتره اونارو با هم دوره کنیم و بیایم جلو ..

                  از آقای Kass شروع کنیم .. این آقا ایده ی Snake هارو برای بار اول مطرح کرد و تقریبا این روش رو توی Segmentation متولد کرد .. ایده ی اولیه ی اون چی بود؟ همون بحث انرژی کل که مساوی میشد با مجموع دوتا انرژی داخلی و خارجی .. اون اوایل مدل رو با پارامتری کردن یه Curve بر حسب S به دست میاوردن و بر حسب منطق اویلر-لانگرانژ جمله ی کنترلیشون رو Force میکردن که صرفا روی Boundary تمرکز کنه و به اون نزدیک بشه .. اون Minimization ای که برای اون Energy Function شون در نظر میگرفتن در عمل زیاد نتونست به Application های مختلف کمک کنه .. یعنی اگه یه جایی Image ما Saddle Point داشت یا اینکه رنج کانتور اولیه مون خیلی زیاد بود (Wide area) یا اصلا از همه بدتر تصویرمون به قول معروف Concavity زیادی داشت، این اصلا نمیتونی کاری کنه و دوتا اتفاق براش میوفتاد: یا گیر میکرد توی یه Iteration و یا اینکه واگرا میشد ..

                  رو حساب این نقطه ضعف ها XU اومد گفت که اگه یه ضریب Regulirizer توی Energy Function مون در نظر بگیریم به طوریکه این ضریب بتونه جمله ی کنترلی مارو بسازه تونستیم دو تا مشکل رو حل کنیم .. اول اینکه بخاطر ضریبی که در آخر برای Vector Field (V) به دست میاد؛ مشکل رنج کانتور اولیه و رنج کانتور منتشر شده رو تا حد زیادی حل میکنه و دیگه اینکه مشکل Concavity برای یه کانتور حل میشه .. امـا هنوز Saddle point سر جاش مونده و باقیه ..

                  حالا XU این کارو که کرد؛ دید روی تصویرای مختلف بازده های مختلف داره .. مثلا حتما این اشکالاتش رو شنیدید که اگه محیطی خیلی نویزی باشه؛ GVF نمیتونه Segmentation اش رو Texture Based انجام بده و از بد ماجرا اون نقاط نویزی رو هم Segment میکنه .. این اتفاق برای Application های مختلف؛ نتایج مختلفی داره .. مثلا اگه کار روی تصاویر MRI مغز باشه و بخوایم ناحیه ی رگ ها رو Detect کنیم، این نویز ها میشن هر کدوم یه رگ جدید و این یعنی افتضاح کرده الگوریتم .. امــا اگه بخوایم مثلا روی ناحیه ی کبد داخل بدن کار کنیم؛ این مشکل میتونه با یه Denoising حل بشه چون تغییرات Texture اون ناحیه نسبت به این تیپ نویزها کمتر حساسه ..

                  از این بدتر؛ مشکل Deformable بودن Shape ها بود .. کار XU در اصل روی لایه ی خارجی مغز تست شده بود که این تغییرات رو در بدترین حالت در نظر بگیره امــا مثلا اگه یه Shape بود که داخلش یه ناحیه ی حفره مانند وجود داشت؛ GVF دیگه نمیتونست بره و اونو Segment کنه و همین نقص باعث شد که بگن GVF توی Tracking چند تا Object مشکل داره و استفاده از اون اصلا نمیتونه مفید باشه .. (به جاش Level set رو پیشنهاد دادن و میدونیم که چقدر هم موفق بوده) .. حالا این نواقص باعث شد که یه عده توی دنیا به دنبال این باشن که کار GVF رو یه کم Modify کنن و در اصطلاح بدون دست زدن به قالب های کلیش؛ روی ظرائفش کار کنن و بتونن اونو برای موارد خاص؛ Extend کنن ..

                  حالا منظور از Improved چیه اینجا گفته؟ من اول یه فکر دیگه میکردم امــا این سه تا Paper رو که خوندم دیدم یه منظور کلی بیشتر نداره و اون اینه که هر کدوم به سلیقه ی کارشون اومدن روی GVF ایده زدن تا بتونن از GVF تو کاراشون استفاده کنن .. خیلی کارای اون دوتا رو باز نکنیم بهتره؛ ولی کار سومی که عکساش شبیه کار شماست رو یه کم باز میکنیم .. توی اون دو تا Paper یه لایه به پردازش اضافه کرده و در واقع Preprocessing رو با GVF ترکیب کرده .. مثلا توی یکیشون که برای LV استفاده شده بود اومده بود چیکار میکرد؟ اول از همه ناحیه ی ROI تصویر رو به دست میاورد .. بعدش اون ناحیه رو Crop میکرد .. بعد به یه فضایی میبردش و روی اون فضا Snake میزد .. جواب هاش هم خیلی خوب شده بود .. یعنی کاملا تونسته بودن Boundary اون LV رو به دست بیارن (که شبیه یه دونات هست) .. ایده ی ROI تقریبا زیاد استفاده میشه و اگه دیده باشید توی اون تاپیک GVF؛ ما هم از این ایده استفاده کردیم تا بتونیم ناحیه ی تومور مغز رو پیدا کنیم .. یا مثلا توی اون یکی Paper برای تصاویر ASAR از متدهای Texture Based استفاده کرده بودن تا بتونه با حذف نویز؛ segmentation رو انجام بده .. صرفا یه سری فیلتر و کارایی از قبیل فیلتریشن LOG Gabor Wavelet .. در واقع اینا از این جهت Improved بودن که یه سری کارا روی Image انجام میدادن تا با همون Snake بتونن Segmentation رو انجام بدن .. (حالا اگه خواستید راجع به این دوتا Paper بیشتر صحبت کنیم؛ من در خدمتم امـا به کارتون کمکی نمیکنه .. اینو مطمئنم) ..

                  امــا توی Paper سوم اینا اومدن روی خود الگوریتم کار کردن و این خوبه .. در کل اومدن دست گذاشتن روی دو تا ویژگی و تاکید کردن که باید بهشون رسید .. یکی سرعت همگرایی و اون یکی هم دقت همگرایی .. به خاطر همین؛دو تا نیروی دیگه تعریف کردن که بتونه واسه رسیدن به اون نقطه کمکشون کنه .. یکی Dynamic GVF و اون یکی هم Balloon Force .. اولی به GVF کمک میکنه تا کانتور از Boundary دور نشه و این یعنی دقت همگرایی .. چطوری؟ خــب؛ خود الگوریتم GVF رو یه بار توی ذهنتون بیارید .. یه قانون کلی داشت و اون اینکه اگه کانتور از لبه رد بشه جهت گرادیانش عوض میشه؛ درسته؟ حالا اگه بیایم یه ضریبی تعریف کنیم که به ازای این تغییرات مقادیر متفاوتی داشته باشه تونستیم کانتور رو Force کنیم که روی Boundary بمونه یا در بدترین حالت به Boundary نزدیک باشه .. این اتفاق خوبیه که میتونه کترل کنه اون چیزی که ما بهش توی GVF میگفتیم واگرا شدن الگوریتم توی نقاطی که یا Discontinuity دارن یا از نظر Texture با بک گراند Correlation بالایی دارن ..

                  در واقع اگه بخوایم یه کم نادقیق و کلی رفتار Dynamic GVF رو توصیف کنیم میتونیم بگیم که اگه کانتور اولیه ی ما روی نقطه ی X1 باشه این نیروی D_GVF به کانتور میگه که برای همگرایی کمتر؛ باید میزان تطابق جهت گرادیان هایی که از فرمول به دست میاد با همون مقدار به ازای GVF بخونه و کانتور باید بره به سمت اون نقطه ی X2 ای که بیشترین تطابق رو داره .. این تطابق هم میشه به راحتی به دست آورد .. یه محاسبه ی زاویه ای برای بردارهای گرادیانی که در نقطه ی X1 و X2 وجود دارن؛ یه Threshold برای حرکت کانتور به نقطه ی جدید و یه جمله ی کنترلی که این تلورانس رو کنترل کنه .. فرمولیزیشن اش هم تقریبا خیلی معمولیه .. Balloon Force هم یه کلک دیگست که اینا زدن تا بتونن بهتر از GVF جواب بگیرن .. حالا ادغام این دو روش با هم یه الگوریتم Modify شده ای رو ساخته که بهش میگن Improved GVF .. اصل کار رو اون D_GVF میکنه ..یه جای دیگه هم ازش استفاده شده که فکر کنم باید اونم بخونیم ..

                  اینا از بحث هایی که من از این سه تا Paper متوجه شده بودم و چون به واسطه ی شما بود؛ موظف بودم بهتون بگم .. حالا کاری که به نظرم الان میتونید انجام بدید .. شما یه تصویر رو از کارتون انتخاب کنید .. (تاکید میکنم اونی که از همه بهتره رو انتخاب کنید .. یعنی چی بهتره؟ یعنی اینکه از نظر الگوریتم برای segmentation به مشکل کمتری بخوره .. کدوم الگوریتم؟ GVF معمولی ورژن پنج) ورژن پنجم GVF هم که کدش رو دارید (اگه ندارید بگید تا براتون بفرستم) .. بیاید روی اون تصویر انتخابی؛ الگوریتم رو تست کنید .. ببینید چیا میشه .. کجاها چه اتفاقاتی میوفته .. بعد میشینیم فکر میکنیم که چیکار باید کرد .. این روش D_GVF به نظرم خیلی روش خوبیه .. مناسب Application خودتونه .. یه Paper دیگه هم هست که در مورد D_GVF نوشته شده (گفتم اون بالا) .. فایلش رو براتون ضمیمه ی این پست کردم .. اونو من نخوندم .. ولی حتما به کار میاد .. بخونیدش .. منم یه کم وقت پیدا کنم میخونمش .. بعد روی اونم بحث میکنیم .. موفق باشید ..
                  فایل های پیوست شده
                  دوستان! مدتی کمتر به سایت میام ..

                  دیدگاه


                    #24
                    پاسخ : Active Contour Models

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

                    نوشته اصلی توسط eatip65
                    سلام.تو یکی از پست ها به خانم بهار گفته بودین یه مقاله هست تو زمینه های level set ها ، مربوط به 2007
                    امکانش هست لینکشو بذارید منم استفاده کنم یا واسم میل کنید لطفا؟خیلی از لطفتون ممنون میشم
                    چرا که نه .... لینکش رو براتون گذاشتم دوباره .. موفق باشید ..

                    http://www.eca.ir/forum2/index.php?topic=25250.msg149623#msg149623

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

                    دیدگاه


                      #25
                      پاسخ : Active Contour Models

                      سلام ابتدا لازم ابراز تشکر کنم از این همه علاقه جهت پیگیری بحثها و راهنمایی های فراوانتان با زحمتی که شما و مدیران سایر انجمنها برای این سایت می کشید همه علاقمندان را علاقمندتر میکنید !!
                      بابت مقاله ای که فرستادید ممنونم. حتما مطالعه میکنم راستش مشکل من روی یه قسمت از مفهوم GVF هست . ریاضیاتشو درست متوجه نمیشم . ببینید اومدن Capture range را با اضافه کردن یک مولفه سلونوئیدی (دیورژانس=0) زیاد کردن. یعنی با اضافه کردن این ترم و افزایش قدرت میدان برداری کاری کردند که میدان در نقاط دور از لبه اصلی object نمیره و به اصطلاح میدان را در همه جا یکنواخت کردن تا به این برسن که هر جا کانتور اولیه رو قرار دادیم (حتی اگه لبه object را قطع کنه )به لبه مورد نظر ما همگرا بشه . اما دقیق متوجه نمیشم این میدان جدید و کلی تری که تعریف کردن چطور مشکل همگرایی را حل کرده!یعنی ربطشو متوجه نمیشم. و مسئله دیگه اینکه چطور کانتور را وادار میکنند اگه راه اشتباه رفت و از لبه گذشت جهت میدان عوض بشه .این مشکل در مورد ballon forceها هم هست چرا اون نیروی فشار تعریف کردن (بردار نرمال منحنیsnake)و رفتار snake را دینامیکی کردن ؟ :question:باید مقاله تعریف gvfسال 98 آقای XU و تعریف ballon snake آقای کوهن را + مقاله شما دوباره مطالعه کنم تا موضوع خوب برام جا بیفته . فکر میکنم و اگه مشکلی بود بازهم بحثو ادامه میدیم
                      باز هم از زحمات شما و کلیه مسئولین تشکر میکنم

                      دیدگاه


                        #26
                        پاسخ : Active Contour Models

                        راستی من کد gvf که دارم ورژن 1 هست!!!! مال سال 1999ورژن 5 در سایت pudnهست که برای دانلودش مشکل دارم اگه لطف کنید ورژن 5 را همینجا بگذارید ممنون میشم
                        آ

                        دیدگاه


                          #27
                          پاسخ : Active Contour Models

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

                          اولا یه عذرخواهی بابت تاخیر .. شرمنده ..

                          خب .. برگردیم به جایی که این ایده مطرح شد و مسیر تکاملش را دنبال کنیم و بیایم جلو تا اینکه برسیم به GVF و توضیحات مربوط به اون .. گفتیم که ایده ی اصلی بر میگشت به مدل Traditional Contour Model جاییکه یه Curve بر حسب یه متغیر S تعریف میشد و تمام تلاشش این بود که در یه فضای گسسته روی آبجکت حرکت کنه تا بتونه یه تابع انرژی رو Minimize کنه .. این تابع تشکیل میشد از دو بخش خیلی خاص .. یکی؛ بخشی که انعطاف کانتور رو برای ما ممکن میکرد (با یه سری اعمال وزن به مشتق اول و مشتق دوم تابع Curve مون) و بخش دوم که برای تشخیص Boundary و در نهایت حرکت به سمت اون؛ در نظر گرفته شده بود .. در آخر هم برای اینکه کانتور ما بتونه تابع انرژی تعریف شده رو Minimize کنه، لازم بود تا بتونه توی رابطه ی اویـلـر صدق کنه .. در واقع اگه میخواستیم خیلی کلی و از بالا به موضوع نگاه کنیم باید مساله رو اینطور بیان میکردیم: مجموع دو نیروی خارجی و داخلی باید برابر صفر بشه (یا به عبارتی در شرایط رابطه ی اویـلـر صدق کنه) .. حالا این دوتا نیروی داخلی و خارجی چطور بیان میشدن؟ نیروی داخلی نیرویی بود که روی خمش و انعطاف و کشیدگی کانتور تمرکز میکرد و نیروی خارجی هم نیرویی بود که به کانتور کمک میکرد تا به سمت لبه های آبجکت حرکت کنه .. در واقع نیروی دوم یه رابطه ای داشت با لبه های آبجکت ..



                          بخش اول که به طور کاملا مشخص از روی مشتقات اول و دوم به دست میومد و با اعمال یه سری ضرایب (با نگاه وزنی) میتونستیم یه بالانس بین اونها برقرار کنیم .. بالانس برای چی؟ برای تضمین عملکرد کانتور از نظر انعطافش روی آبجکت .. امــا برای بخش دوم ایده ها باهم دیگه توی این مدل یک مقدار فرق میکرد .. اصل اولیه ای که این مدل بهش معتقد بود این بود که اگه قراره کانتور به ازای تابع انرژی در رابطه ی اویـلـر صدق کنه؛ باید بتونه از گرادیان نیروی خارجی استفاده کنه؛ بنابر این اگه ما نیروی خارجی رو با تصویرمون متناظر کنیم و اونهارو به هم ربط بدیم تونستیم چیکار کنیم؟ توی رابطه ی اویـلـر همگرایی به سمت لبه ها رو جایگزین کنیم .. خب این تعریف دوتا حالت کلی ایجاد میکرد .. یکی اینکه انرژی خارجی ما اندازه ی گرادیان خود تصویر باشه یا اینکه Smooth شده ی این مقدار باشه .. این فرض خوب بود اگر ما تصویرمون Gray Scale بود .. در غیر این صورت (یعنی اگه تصویر باینری داشتیم) باید از خود تصویر و Smooth شده ی خودش استفاده میکردیم نه اندازه ی گرادیانش ..

                          با این فرض نتایجی که از مدل Traditional به دست اومد؛ زیاد بد نبود امــا زیاد هم دلچسب Segmentation کارها نبود .. انتظاری که از این مدل میرفت این بود که بتونه با تغییر دادن ضرایب "آلفا" و "بتا" به خمش و تغییر فرم کانتور کمک کنه به طوریکه بتونه در ناحیه های Concave کاملا وارد بشه و Segmentation رو در اونجا ها هم انجام بده .. امــا اینا به دو نکته توجه نکرده بودن و از همون دو قسمت هم ضربه خورن .. اول اینکه وقتی که مدل رو با منطق حاکم بر ضرایب و تصویر آبجکت بستن (منظورم همون تعریف تابع انرژی شون هست) اومدن و گفتن که این تابع باید در رابطه ی اویـلـر صدق کنه و شرط صدق کردن هم این بود که مجموع نیروهای داخلی و خارجی صفر بشه .. حالا این اتفاق بده یا خوب؟ این اتفاق زمانی میتونست خوب باشه که نقاط U_Shape در آبجکت وجود نمیداشتن .. امــا جایی که این نقاط وجود داشتن؛ کانتور بر حسب تعریفی که از اویـلـر براش تعیین شده بود به بررسی مجموعه نیروهای خارجی و داخلی میپرداخت و این نکته باعث میشد که تفاضل اینها رو در عمل وارد نتیجه کنه .. پــــس وقتی دو نیرو در خلاف جهت هم میدید؛ اینها رو از هم کم میکرد و برآیندشون رو صفر قرار میداد یا اگه باهم برابر نبودن؛ مقدار رو در جهت افق قرار میداد .. این صفر شدن برآیند یا جهت گرفتن مقدار نهایی تفاضل در راستای افق باعث میشد تا در نقاط Concave کانتور هیچ واکنشی نشون نده و در واقع مسیر رو به داخل، طی نکنه و این اولین و عمده ترین اشکال این مدل بود .. به شکل زیر دقیقا نگاه کنید ..



                          چه اتفاقی افتاده؟ الگوریتم در اطراف Boundary آبجکت؛ خوب Segmentation رو انجام میده امــا توی نقاط U_Shape ببینید چه رفتاری داره؟ اصلا نمیتونه وارد اون محدوده بشه .. چرا؟ برای اینکه نیروهای داخلی و خارجی همدیگه رو خنثی میکنن یا در راستای افق، جهت قرار میگیرن و هیچ بردار گرادیانی به سمت پایین وجود نداره که بتونه نقطه ی شروع بعدی برای کانتور ما باشه .. اگه بخوایم به صورت کاملا گرافیکی این اتفاق رو بررسی کنیم، باید اون قسمت رو بذاریم زیر ذره بین .. زیر ذره بین؛ رفتار بردارهای گرادیان در اون محدوده خیلی جالب میشه که میتونید اون رو در شکل زیر ببینید ..



                          حالا ممکنه بگید این اتفاق با پدیت کردن ضرائب از بین میره یعنی میتونیم کانتور رو وارد نقاط U_Shape بکنیم .. امــا جواب کاملا منفیه .. چون این نیروها به صورت افقی در این محدوده وجود دارن و شما هر کاری بکنید، اینها دست نمیخورن .. اگه برآیندشون هم صفر نشه در یک جهتی به سمت افق قرار میگیرن که نمیشه اونهارو از هم تفکیک کرد یا مولفه ای ازشون پیدا کرد که بشه به سمت پایین براش مسیری تعریف بشه .. کما اینکه خودشون هم از این ایده استفاده کردن و بارها و بارها در آزمایش های مختلف، به این ضرایب دست زدند امــا اتفاقی که افتاده چی بوده؟ هـیــچ .. اصلا نتونستن این مشکل رو بهترش کنن .. یعنی نمیشه گفت این اتفاق به خاطر ناهماهنگی ضرایب؛ یا نا منعطف بودن کانتور افتاده .. خـیـر .. به دلیل اینکه نوع تعریف تابع انرژی بر اساس منطق خاصی بوده این اتفاق افتاده و نمیشه اون رو تغییر داد ..

                          از این مشکل که بگذریم؛ به یه مشکل دیگه میرسیم و اون اینکه بردارهای اندازه ی گرادیان ما به محض اینکه یک مقدار از Boundary آبجکت فاصله میگیرن؛ کشته میشن .. یعنی از دست میرن و این اتفاق بده .. چرا بده؟ به دلیل اینکه با مشکل Capture Range روبرو میشیم .. همه ی تلاش Snake اینه که بتونه تا حدودی مستقل از ناحیه ی Initialize شده عمل کنه امــا اینجا میبینیم که اصلا اینطور نیست .. بلافاصله با فاصله گرفتن از Boundary آبجکت؛ نه تنها اثر Capture Range در خارج از آبجکت زیاد نمیشه بلکه داخل خود آبجکت هم کم میشه و اینو دیگه چیکارش بکنیم؟ درسته که اگه Initialization خوب باشه فقط مشکل اول برای ما مطرحه امــا نمیتونیم مورد دوم رو هم ندید بگیریم و باید به فکری باشیم که مورد دوم هم بهتر بشه .. اگه مطلب بالا در مورد Capture Range زیاد شفاف نیست؛ میتونید تصویر زیر رو ببینید .. این تصویر بردارهای اندازه ی گرادیان رو بر روی آبجکت نشون میده .. خوب به شکل دقت کنید ..



                          همه ی اونچیزی که توی این شکل هست؛ اندازه ی بردار نیروی خارجیه که همونطور که میبینید؛ در خارج از ناحیه های Boundary کشته شده و فقط دور یه ناحیه ی خاص از اون، مقدار و اندازه داره و این یه پیام خیلی مهم برای ما داره و اون اینکه شما باید نیروی خارجیتون رو هم تغییر بدید تا بتونید این اتفاق رو رفعش کنید یا به بیان ساده تر الگوریتمتون رو برای برطرف کردن مشکل Capture Range بهینه کنید .. حالا ممکنه بگید اگه ما توی اون مرحله ی Smoothing با تغییر سیگمای Blurring بتونیم مقدار گرادیان انرژی خارجی رو که برمیگرده به ماهیت Image ؛ تغییر بدیم (یعنی زیادش کنیم) آیا این مشکل برطرف نمیشه؟ یا لا اقل بهتر نمیشه؟ جواب مثبته یعنی اینکه بهتر میشه امــا همینجا دوباره یه سوال پیش میاد و اون اینکه اگه Image شما Smooth بشه باز هم میتونید به خوبی گذشته Boundary های آبجکت داخل تصویرتون رو به دست بیارید؟ اینجا جواب منفیه .. یعنی هرچی تصویر Smooth تر باشه؛ Resolution به دست آوردن Boundary کمتره و در نتیجه همگرا شدن به Boundary برای مدل ما مشکل تره و این یه اصله که به عنوان Trade off باید بهش توجه کرد ..

                          جمعبندی مطالب بالا میشه دو تا مشکل که باید حل بشن: Boundary Concavity و Capture Range .. در ادامه ی این بحث ها دو نفر اومدن یه ایده ی جدید رو باز کردن که میشد بهش تا حدود زیادی اعتماد کرد .. اونا گفتن اگه روی انرژی خارجی کار کنیم، میتونیم مشکل Capture Range رو حل کنیم .. برای حل این مشکل یه Potential Function جدید تعریف کردن که روی محاسبه ی فاصله ی اقلیدسی و Chamfer تمرکز داشت .. این کار باعث شد مشکل Capture Range حل بشه امــا چطور؟ در واقع اینطور به موضوع نگاه کنید که قبلا از Image گرادیان گرفته میشد؛ توی مدل اینا از یه Distance Map .. همین .. این تعریف باعث میشه که مقدار گرادیان در نواحی خارج از آبجکت و در واقع دورتر از اون هم Value داشته باشه و این عاملیه که میتونه مشکل Capture Range رو برطرف کنه .. امــا ما چیزی از مشکل اول نگفتیم .. در واقع این مدل باز هم نتونست دوتا مشکل رو باهم برطرف کنه و فقط متمرکز شد روی یه دونه از اونا .. باز هم مشکل اول سرجاش مونده .. یعنی توی نقاط U_Shape ما هنوز مشکل قبل رو داریم چرا که نتونستیم عنصر جدیدی پیدا کنیم که جهت گرادیان هارو برامون تغییر بده .. هنوز جهت در راستای افق هست و نتونستیم اونهارو به سمت پایین بکشونیم .. فقط و فقط Capture Range بهتر شد .. در واقع یه تبدیلی انجام دادن که فقط روی بالا رفتن اندازه ی گرادیان تاثیر گذاشت و به جهت نیروها کاری نداشت .. شکل زیر این بهتر شدن رو به خوبی نشون میده .. میتونید به دقت اونو ببینید ..



                          تا اینجا دوتا مدل از سه تا مدل رو بررسی کردیم .. Traditional و Cohen .. الآن دیگه نوبت GVF هست که در موردش صحبت کنیم .. توی GVF یه اتفاق خیلی خاص افتاده و اون اینکه یه نیروی خارجی جدید برای تابع انرژی تعریف کردن که نامش همون Gradient Vector Flow هست .. این نیرو جانشین چی میشه؟ جانشین همون منفی گرادیان انرژی خارجی ای که توی دوتا مدل قبل روشون صحبت کردیم .. اینجا در واقع توی فرمولیزیشن دست برده شده و این یعنی انتظار برای تغییر در نتیجه ی نهایی .. از اونجایی که V یه مقدار مثبت هست؛ نمیتونه منفی پشت سرخودش توی رابطه ی اویـلـر رو بپذیره و این باعث میشه که رابطه یک مقدار از نظر ظاهر؛ با قبل از این تفاوت داشته باشه ..



                          حالا ببینیم از نظر ویژگی این مدل چه خاصیتی داره که باعث شده بتونه مشکل Segmentation رو حل کنه .. کلا توی GVF ما باید دو بخش جداگانه رو بررسی کنیم .. یکی Edge Map و اون یکی هم Gradient Vector Flow .. اول میریم ببینیم این Edge Map چی برای گفتن داره .. این قسمت رو با این بیان شروع میکنیم: رابطه ی تابع انرژی رو به یاد بیارید .. یادتون اومد؟ خــب .. گفتیم که دو قسمت داشت .. یکی انرژی داخلی و دیگری هم انرژی خارجی .. اون قسمت انرژی خارجی رو یادتونه گفتیم برای چی بود؟ برای ..... ؟ برای نزدیک شدن کانتور به Boundary آبجکت .. حالا اگه جای اون انرژی رو با یه تابع Edge Map عوض کنیم؛ چه اتفاقی میوفته؟ یه مقدار فکر کنید ...... خــب .. تابع Edge Map اساسا از چه جنسیه؟ از جنس Edge .. یعنی چی؟ یعنی اینکه تمرکزش روی لبه های تصویره .. حالا اگه جای انرژی خارجی رو با این تابع عوض کنیم, چه اتفاقاتی در مدل ما میوفته؟ اولا: گرادیان این تابع؛ بردارهایی رو به ما میده که به سمت لبه های آبجکت هستن و در واقع راستاشون به صورت نرمال ؛؛ عمود بر مماس خطوط Boundary آبجکت هست .. دوما: بردارهایی که همین الان ازشون گفتیم؛ تنها برای محدوده هایی که نزدیک Boundary آبجکت هستن؛ اندازه ی زیادی دارن .. و سوما اینکه اگه تصویر، (از نظر Color Distribution و البته تقریبی) به صورت یکنواخت باشه؛ گرادیان تابع Edge Map در اون تقریبا صفر میشه ..

                          حالا سوال اینه که کدوم یکی از این سه تا اتفاق خوبه و کدوم یکی بده .. اتفاق اول برای ما خوبه چرا که میتونه کانتور ما رو بکشونه به داخل نواحی U_Shape .. پــس این OK هست .. اتفاق دوم خوب نیست؛ چرا که داره Capture Range رو برای ما محدود میکنه .. اتفاق سوم هم خوب نیست؛ چراکه انتظار ما در نواحی یکنواخت اینه که یه Vector Field ای داشته باشیم امــا اینجا اون مقدار برابر صفر میشه و این خوب نیست .. دو اتفاق آخر زیاد تاثیری بر روند Segmentation نداره و میتونیم اونها رو با معادلات Diffusion حل کنیم .. امــا خوبی اتفاق اول به ما کمک میکنه تا مشکل اصلی کانتورهای پارامتریک رو حل کنیم و اون Boundary Concavity شون هست .. این بخشی از کمکی هست که Edge Map میتونه به ما بکنه .. حالا باید ببینیم توی بخش Gradient Vector Flow چه اتفاقی میوفته و باید اونجا به چه چیزهایی توجه کرد ؟ در واقع GVF یه راه حل معادلیه برای رابطه ی زیر ...



                          رابطه ی بالا رو یک مقدار بازش کنیم ببینیم چی میگه .. قسمت اول؛ کاملا داره یه نکته رو میگه و اون اینه که اون تیکه نقش یه Smoothing Term رو بازی میکنه .. در واقع این بخش به تنهایی میتونه Vector Field های متغییر تولید کنه و وزنی که برای اون در نظر میگیره بر حسب تابع g بیان میشه .. تابع g ارتباط مستقیم داره با تابع Edge Map ما و کاملا میتونه نشون بده که اگه این مقدار کم یا زیاد بشه؛ چه تغییری توی تولید Vector Field متغییر به وجود میاد .. بخش دوم چی؟ بخش دوم هم نقش Data Term رو بازی میکنه .. یعنی مستقیم با Boundary آبجکت ما سروکار داره .. کاملا هم مشخصه .. تفاضل u با گرادیان تابع Edge Map .. تابع h هم یه وزن برای این بخشه .. در واقع اگه از بالا به فرمول نگاه کنیم دو تا بخش کلی داریم .. یکی مربوط به تولید Vector Field های متغییر با وزن g میشه و اون یکی بخش هم مربوط به حرکت به سمت Boundary میشه .. اون چیزی که توی این رابطه خیلی مهمه وزن هایی هستن که ما برای دو بخش معرفی شده در نظر گرفتیم .. ارتباط مستقیم اونها با Edge Map باعث میشه که با تغییرات Edge Map میزان این وزن ها تغییر کنه و این میتونه از تغییر ناگهانی و شدتی وزن ها به صورت غیر متناسب جلوگیری کنه ..

                          برای اینکه بتونن معادله بالا رو حل کنن؛ برای ضرایب دوتا مقدار خاص در نظر میگیرن ..



                          وقتی که g رو برابر یه مقدار ثابت میگیریم این منظور رو داریم که Smoothing به صورت یکنواخت در همه جا رخ بده (روی Vector Field ها) و وقتی ضریب h رو با اندازه ی گرادیان تابع Edge Map متناظر میکنیم تنها و تنها منظورمون اینه که میخوایم با نزدیک شدن به Boundary میزان این ضریب رو افزایش بدیم .. حالا تحلیل این اتفاق ... نتیجه ای که با داشتن این دو ضریب میتونیم از مدل کانتورمون بگیریم کاملا میتونه مارو به سمت لبه ها حرکت بده و Segmentation رو برامون انجام بده ولی یه مشکل داره و اون اینکه چون ضریب g ثابته؛ در نتیجه Smooth شدن Vector Field ها در همه جا یکسانه و این باعث میشه که اگه دوتا لبه ی نزدیک به هم داشته باشیم؛ مثلا فرض کنید مثال ما حکم یه ناحیه ی U_Shape بسیار تنگ رو داشته باشه و بخوایم کانتورمون وارد اون محدوده بشه .. با فرض Smoothing یکنواحت برای Vector Field هامون، کانتور نمیتونه از اون نقطه ی U_Shape به داخل حرکت کنه و همون وسطا میمونه .. مثالی که میشه زد رو در شکل زیر ببینید .. یکی خود آبجکته و اون یکی هم دیاگرام Vector Field اونه ..



                          حالا این اتفاق چطوری بهتر میشه؟ باید اون فرم یکنواخت g رو یه طوری متناسب کنیم با تابع Edge Map به طوریکه وقتی اون تغییر میکنه؛ ضریب g هم عوض بشه و طبیعتا باید کم بشه تا بتونه به داخل ناحیه ی U_Shape وارد بشه .. خـب .. چی فکر میکنید؟ مقدار زیر رو ببینید ..



                          الان این مقدار خیلی مقدار خوبیه .. چرا؟ چون به ازای اون جایی که g کم میشه؛؛ h زیاد میشه و برعکس .. این خوبه .. خیلی هم خوبه .. اون ضریب ثابت K هم در واقع یه Trade Off هست بین اینکه شما چقدر براتون Field Smooth مهم باشه و چقدر گرادیان لبه ای .. در پایان هم میتونید نتایج این مدل رو روی مدل تست شده ی معروف ببینید .. دقیق به شکل ها نگاه کنید و سعی کنید براشون توجیه پیدا کنید .. امیدوارم مطالب بتونه کمکتون کنه .. هر جاییش رو من بد توضیح دادم یا شما سوال داشتید بگید تا روش صحبت کنیم .. کدهای GVF ورژن چهارم و پنجم رو هم براتون میل کردم .. حجمش زیاد بود و نمیشد اینجا پلود کنم .. موفق باشید ..



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

                          دیدگاه


                            #28
                            پاسخ : Active Contour Models

                            سلام متشکرم از فایلهایی که فرستادین خیلی خیلی کمکم کردید یه مقداری این 2هفته سرم شلوغ شده شرمنده بابت تاخیر .
                            یه نکته جالب اینه که این موضوع اکتیو کانتورها خیلی کاربردی و البته موضوع جذابیه. نمیدونم چرا سایر دوستان در مباحث شرکت نمیکنند. ایکاش که دوستان دیگه هم نظر بدن تا از نظراتشان استفاده کنیم و بحث را زیباتر دنبال کنیم
                            باز هم از زحماتتان تشکر میکنم و تا آخر هفته بحثو ادامه میدم
                            متشکرم

                            دیدگاه


                              #29
                              پاسخ : Active Contour Models

                              باز هم سلام.و عذرخواهی بابت تآخیر
                              در ادامه بحث اگر اجازه بدید کمی از تئوری فاصله بگیریم و به سراغ پیاده سازی و مشکلات اون بریم
                              ببینید حقیقت من زیاد به محتویات فایل پیاده سازی شده Xu توجهی نکردم و ازش سر درنیاوردم . اما چیزی که برام سواله اینه که GVFمستقیما به حل معادله تعادل انرژی میپردازه و از اونجا حالت ایستای منحنی را تعیین میکنه طبق مقاله سال 97 آقای XU باید تابع انرژی فرمول (12) مینیمم بشه (ببخشید که نمینویسم فرمولو نمیدونم چطور باید عکس را اینجا کپی کرد) اما این تابع انرژی فقط شامل انرژی خارجی هست یعنی انرژی میدان GVF + انرژی وابسته به EDGE MAP بنابر این اثری از انرژی داخلی Eint اصلا در اینجا دیده نمیشه و اگر مقاله رو نگاه کنید همین تابع انرژی را حل کرده (مینیمم کرده و در نهایت رسیده به فرمول(14))کهمقدار نهایی بردار gvf را تعیین میکنه اما معلوم نیست سر منحنی ما در نهایت چی اومده ؟متوجه میشید چی میگم؟
                              یعنی مندر مرحله پیاده سازی میام یک منحنی را روی شکلم باکلیکهای موس تشکیل میدم که همون کانتور اولیه ام هست یک بردار gvf و بعد یک نیروی خارجی با فرمول 14 تعریف میکنم اما :اولا نیروی خارجی را فقط دارم و ثانیا این نیرو اصلا به منحنی من ربطی نداره و حرکتش نمیده
                              برنامه هیچ خطایی نمیده اما مشکل حرکت کانتور ات که اصلا حرکتی نداره یعنی نیروی من اصلا به کانتورم ربطی نداره !!!
                              ممنون میشم در این مورد هم راهنماییم کنید

                              دیدگاه


                                #30
                                پاسخ : Active Contour Models

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

                                شرمنده بابت تاخیر ..

                                اما این تابع انرژی فقط شامل انرژی خارجی هست یعنی انرژی میدان GVF + انرژی وابسته به EDGE MAP بنابر این اثری از انرژی داخلی Eint اصلا در اینجا دیده نمیشه و اگر مقاله رو نگاه کنید همین تابع انرژی را حل کرده (مینیمم کرده و در نهایت رسیده به فرمول(14))کهمقدار نهایی بردار gvf را تعیین میکنه اما معلوم نیست سر منحنی ما در نهایت چی اومده ؟متوجه میشید چی میگم؟
                                من متوجه نشدم .. میشه دوباره سوالتون رو بپرسید؟

                                برنامه هیچ خطایی نمیده اما مشکل حرکت کانتور ات که اصلا حرکتی نداره یعنی نیروی من اصلا به کانتورم ربطی نداره !!!
                                کدوم برنامه رو میگید؟ GVF_XU_5 ؟ ورژن پنجم XU؟ من برنامه رو Run کردم .. دقیقا کانتورها میشینن روی Boundary .. مشکل شما چی بوده؟ من منتظر میمونم .. موفق باشید ..
                                دوستان! مدتی کمتر به سایت میام ..

                                دیدگاه

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