اطلاعیه

Collapse
No announcement yet.

Morphological Image Processing Tutorial

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    Morphological Image Processing Tutorial

    با سلام .... :smile:

    آقای حسام الدین هر چند که گویا دیگه توی سایت فعالیت ندارید :( ولی واقعا خیلی خوب بیان کرده بود .... :agree:البته چون صفر کیلومتر هستم همه اش رو متوجه نشدم ولی واقعا خوب بود .....اخه بعضی جا ها تصویر پریده بود .... :cry2:





    من یه سوال فعلا از dilation داشتم همین جا میپرسم ......

    من میخوام به صورت دستی خودم dilation ماتریس im رو با عنصر سازنده se1 که تصویرش هم دادم به دست بیارم ..... باید چی کار کنم ؟؟؟

    خوب اولین کار باید مرکز کرنل یا همون سازه ام که این جا se1 هست رو به دست بیارم .

    حالا طبق تعریف که از dilation داشتیم و توی اولین پست همین تاپیک هم هست باید اول translation ؛ ..reflection کرنل یا سازه که این جا همون se1 هست رو به دست بیارم ....

    خوب بعد باید این کرنل رو روی تک تک پیکسل های im حرکت بدم ....اگه یک های کرنل تنها حتی با یه دونه از پیکسل های یک پیش زمینه( یا همون ابجکت ) هم پوشانی داشت اون وقت باید جای اون پیکسلی که مرکز کرنل روی اون منطبق شده عدد یک رو قرار بدیم ...

    میخوام بدونم همین جوری هست ؟؟؟ :( من نمیدونم ....

    بعد یه سوال خیلی مسخره ؛ :cry2: اینکه من چه جوری باید translation و reflection ماتریس کرنل رو به دست بیارم ؟؟؟!!


    مصادیق اظهار محبت به همسر
    بررسی مسائل جنسی در زندگی زناشویی(فایل صوتی)
    ویژگی های خانواده سالم - مصادیق احترام (فایل صوتی)
    اثر قصه گویی برای کودکان

    دیدگاه


      #17
      پاسخ : Morphological Image Processing Tutorial

      جواب سوال اولتون مثبت هست .

      برای سوال دومتون برای چی میخایید این کار رو انجام بدید ؟؟؟؟

      دیدگاه


        #18
        Morphological Image Processing Tutorial

        سلام .... :smile:

        با تشکر از پاسختون ... :agree:

        هیچی میخوام امتحان کنم ببینم متلب اشتباه نکرده !!! :mrgreen:

        خوب میخوام بفهممش ..... چه جوری به دست میاره ...
        مصادیق اظهار محبت به همسر
        بررسی مسائل جنسی در زندگی زناشویی(فایل صوتی)
        ویژگی های خانواده سالم - مصادیق احترام (فایل صوتی)
        اثر قصه گویی برای کودکان

        دیدگاه


          #19
          Morphological Image Processing Tutorial

          سلام .... :smile: خودم گرفتم چی شد ... :smile: این هم نتیجه اش .....

          البته این رو هم بگم که همه این کار ها رو متلب خودش انجام میده ... یه جورایی پشت پرده اش هست ...که البته یه چیزایی اش هم توی پست های قبل گفته شده ...

          پیدا کردن مرکز ثقل کرنل :
          کلا برای درست کردن سازه ها یا کرنل از دستور strel استفاده میشه ... که حالت های مختلفی داره ... میتونه خطی ؛ دایره ای ؛ لوزی ؛ مربعی و غیره .... باشه .
          مهمترین نکته در یه سازه پیدا کردن مرکز ثقل سازه یا کرنل هست ..این مرکز ثقل رو توی هلپ متلب به عنوان orgin بیان کرده و معمولا در شکل ها دورش یه دایره کشیده . که برای هر کرنلی مرکز ثقل رو از رابطه زیر به دست میارن ...

          floor( ( [r c ]+1 ) / 2 ).که در این جا r و c در واقع سطر و ستون های کرنل هست
          مثلا اگه یه همچین چیزی رو بنویسیم :


          همون طور که دیده میشه مرکز ثقل دقیقا در وسط قرار گرفته حالا اگه از فرمول هم استفاده کنیم مختصات مرکز ثقل رو به ما میده .


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




          حالا با رابط هم به دست میاد :






          محاسبه reflection یه کرنل :
          در حالت اول فرض کنیم کرنلی با سطر و ستون های فرد رو ایجاد کردیم یه چیزی مثل زیر :





          مرکز ثقل به عنوان مبدا مختصات کارتزین در نظر گرفته میشه و قراردادی سمت پایینش در واقع مثبت x و سمت راست مرکز ثقل مثبت y در نظر گرفته میشه . اگه بخوایم خیلی ساده بگیم برای به دست آوردن reflection کافی هست مختصات هر خونه رو x وy اش رو قرینه کنیم میشه مختصات جدید اون خونه در ماتریس reflection .



          مثلا مختصات 1-,2-) در کرنل اصلی هست که مقدارش عدد صفر هست حالا ابتدا این x وy رو قرینه میکنیم میشه (2,1) ؛ یعنی در ماتریس جدید باید در مختصات (2,1) عدد 0 رو قرار بدیم .

          البته از خود نرم افزار متلب از تابع reflect میشه برای محاسبه reflect یه سازه استفاده کرد. کلاس ورودی این تابع باید حتما strel باشه یعنی اگه یه ماتریس معمولی رو قرار بدیید خطا میده مثلا در زیر همین ماتریس بالا رو با تابع متلب به دست میاریم ...



          حالا فرض کنید سازه مورد نظر ما سطر و ستونش زوج باشه توی این حالت متلب قبل از این که بخواد reflection سازه رو محاسبه کنه اول میاد به سازه یه سری صفر اضافه میکنه تا سطر رو ستون رو فرد کنه البته باید این هم در نظر گرفت که اضافه کردن این صفر ها به نحوی هست که مرکز ثقل کرنل قبل از اضافه شدن صفر ها و بعد از اضافه شدن صفر ها تغییر نمیکنه . در ثانی اضافه کردن صفر به طوری که مرکز ثقل تغییر نکنه مشکلی پیش نمیاره چون در dilation وقتی کرنل رو روی تصویر اصلی یا تصویر ورودی translate یا به عبارتی جابه جا میکنیم فقط در صورتی عدد متناظر در زیر مرکز ثقل به یک تبدیل میشه که حداقل یکی از پیکسل های 1 کرنل با پیکسل ابجکت هم پوشانی داشته باشه در واقع به صفر ها ی کرنل ربطی نداره ...اگه بخوایم هم به صورت دستی هم مرکز ثقل رو پیدا کنیم باید اول صفر اضافه کنیم بعد عمل reflection رو انجام بدیم .


          حالا یه نمونه با متلب :





          اتفاقی که میفته این هست که متلب سازه se رو به صورت زیر بهش صفر اضافه میکنه و بعد رفلکشنش رو محاسبه میکنه ..




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



          البته همون طور هم که اول گفتم شکل سازه ها میتونه فرق کنه من حالا فقط حالت square رو گفتم ....
          مصادیق اظهار محبت به همسر
          بررسی مسائل جنسی در زندگی زناشویی(فایل صوتی)
          ویژگی های خانواده سالم - مصادیق احترام (فایل صوتی)
          اثر قصه گویی برای کودکان

          دیدگاه


            #20
            پاسخ : Morphological Image Processing Tutorial

            با سلام ....

            من یه سوال از imerode داشتم ....این برنامه ساده رو ببینید


            سازه من از نوع خطی با 3 عنصر و زاویه صفر نسبت به محور افق هست .... از طرفی میخوام عمل erosion رو انجام بدم خوب طبق تعریف translation کرنل باید زیر مجموعه از ماتریس تصویر باشه که حالا این جا فرض شده همون a هست ....الان مرکز ثقل در سازه اون پیکسل وسطی هست خوب حالا این رو روی تک تک پیکسل ها حرکت میدیم هر جا که همه شازه با یک ها ی تصویر هم پوشانی داشته باشه اون پیکسل از تصویر رو یک میکنیم الان خوب من مشکلم با کناره هاش هست چرا ارین جوری شده ؟؟؟مثلا کرنل اگه روی سطر دوم ستون اول از ماتریس a بیاد باید نتیجه صفر بشه چون همه یک ها که هم پوشانی نداره با تصویر ولی چرا یک شده ؟؟؟
            مصادیق اظهار محبت به همسر
            بررسی مسائل جنسی در زندگی زناشویی(فایل صوتی)
            ویژگی های خانواده سالم - مصادیق احترام (فایل صوتی)
            اثر قصه گویی برای کودکان

            دیدگاه


              #21
              پاسخ : Morphological Image Processing Tutorial

              سلام
              آقای حسام الدین متن خیلی خیلی جالبی گذاشتید :nice: ولی نمیتونم عکسها رو پیداکنم باید چکار کنم... :cry2:

              دیدگاه


                #22
                پاسخ : Morphological Image Processing Tutorial

                سلام ..

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

                نوشته اصلی توسط arash_orangi
                سلام
                آقای حسام الدین متن خیلی خیلی جالبی گذاشتید :nice: ولی نمیتونم عکسها رو پیداکنم باید چکار کنم... :cry2:
                دوستان! مدتی کمتر به سایت میام ..

                دیدگاه


                  #23
                  پاسخ : Morphological Image Processing Tutorial


                  سلام. کدی که در پاسخ #3 (تصویر mip برای dilation) گذاشته بودید رو من برای تصویر ورودی دیگه ای استفاده کردم اما فکر میکنم بخاطر اینکه 90% تصویر سیاه و تنها چند نقطه ی رنگی کوچک (مربوط به یک object)داخلش داشت بود که im2dw کاملآ سیاه و dilation کاملآ سفید شد...باید kernel و عوض کنم یا اینکه کلا برای این نوع تصاویر جواب نمیده؟

                  دیدگاه


                    #24
                    پاسخ : Morphological Image Processing Tutorial

                    این تصویر ورودیه:


                    upload foto


                    و من برای مثال میخوام تشخیص بدم که نقاط داخل کادر سفیدرنگ اگرچه از هم جدا هستند اما مربوط به یک object میباشند:

                    دیدگاه


                      #25
                      پاسخ : Morphological Image Processing Tutorial

                      سلام ..

                      به این منظور که بتونید تشخیص بدید؛ آیا اون نقاط دنباله دار؛ مربوط به یک Object هستن یا نه؛ شاید ایـن تاپیک و مطالب مطرح شده در اون بتونن کمکتون کنن .. بعلاوه؛ اگر با دستور im2bw اطلاعات رنگی رو از دست میدید در زمان باینری کردن تصویر؛ شاید بهتر این باشه از threshold (آستانه) مناسب استفاده کنید (--حتی از دستور graythresh هم میتونید برای پیدا کردن آستانه ی مناسب کمک بگیرید--) .. موفق و سلامت و شاد باشید ..
                      دوستان! مدتی کمتر به سایت میام ..

                      دیدگاه


                        #26
                        پاسخ : Morphological Image Processing Tutorial

                        سلام ..

                        در یکی از پست های قبل ؛ در این مورد صحبت کردیم که میتونیم از تکنیک Erosion برای Pattern Matching استفاده کنیم به نوعی .. شاید بهتر این باشه؛ که پیش از پرداختن به ادامه ی مطالب (امیدوارانه)؛ به یک مثال دقیقتر از این مساله اشاره کنیم .. فرض کنیم؛ تصویری داریم با اطلاعات نوشتاری زیر و قصد داریم تا دفعاتی رو که حرف L در این متن به کار رفته رو با استفاده از تکنیک های مورفولوژی به دست بیاریم ..


                        برای این منظور؛ Kernel ای که انتخاب میکنیم رو حرف L تعریف میکنیم؛ امــا یک شرط خاص برای این کار وجود داره و اون هم مشابه بودن فونت و سایز Template (--الگو--) ی ما هست .. اگر از زبان های برنامه نویسی؛ مناسب برای Script استفاده کنیم؛ میتونیم این مساله رو خیلی بهتر و ساده تر حل کنیم؛ امــا در اون صورت؛ صورت مساله ی ما؛ مربوط به Image Processing نمیشه و وارد محدوده ی دیگه ای میشیم که با NLP تطابق پیدا میکنه .. امــا با منطق پردازش تصویر در این مثال میمانیم تا بتونیم کاربردهای مورفولوژی رو باهم تمرین کنیم .. دستورات زیر رو میتونیم در MATLAB بنویسیم و نتیجه ی خروجی ای هم میگیریم رو میتونیم در تصویر بعد؛ بررسی کنیم ..


                        نـتـیـجـه ی اعـمـال دسـتـورات

                        همونطور که در تصویر بالا هم مشاهده میکنیم؛ با استفاده از منطق Erosion موفق به پیداکردن حروف مطابق با Template ای شدیم که به عنوان Kernel تعریفش کرده بودیم .. از ایده ی مشابهی میتوینم برای دسته بندی و آنالیز کردن "تـصـاویـر" متن هایی که به عنوان ورودی دریافت میکنیم استفاده کنیم و به عنوان خروجی هم این موضوع رو منعکس کنیم که متن متعلق به چه نوع دسته ای هست .. بعلاوه؛ میتونیم با تعریف kernel ای برابر با یک لغت/کلمه، بررسی کنیم که این کلمه چند بار در متن تکرار شده و بر مبنای اون تصمیم گیری مناسبی داشته باشیم در مورد متن .. امید که مطالب این پست بتونن به جمعبندی موضوعات مطرح شده در این تاپیک کمک کنن .. پیروز باشید ..
                        دوستان! مدتی کمتر به سایت میام ..

                        دیدگاه


                          #27
                          پاسخ : Morphological Image Processing Tutorial

                          سلام ..

                          برخی مواقع؛ با استفاده از یک ایده ی خیلی معمولی؛ میتونیم کارهای جالبی انجام بدیم که شاید کمتر به اونها فکر میکنیم .. برای مثال؛ میدانیم که Dilation، تصویر ما رو چاق یا فربه تر میکنه و میتونیم از این نکته برای Edge Detection استفاده کنیم (!) .. تنها کاری که لازم هست انجام بدیم؛ این هست که تصویر باینری مون رو با یک kernel کم سایز (کوچک)، dilate کنیم و نتیجه ی اون رو از تصویر اولیه کم (تفاضل) .. از تقاضل این دو ماتریس؛ اون چیزی که برای ما به عنوان نتیجه ی خروجی باقی خواهد ماند؛ پیکسل هایی هستن که بر روی Boundary (لبه) ی تصویر dilate شده (--فربه شده--) قرار دارن و از این رو میتونن بیان کننده ی لبه های تصویر ما باشن .. به عنوان مثال؛ بهتر این هست که شاید تصویر زیر رو به عنوان ورودی در نظر بگیریم ..


                          با استفاده از دستورات مورفولوژی؛ قصد پیدا کردن لبه های تصویر بالا رو داریم .. برای این منظور؛ همونطور که در بالا هم توضیح دادیم؛ میتونیم تصویرمون رو با یک kernel معمولی (+) dilate کنیم و نتیجه ی خروجی رو از تصویر اصلی کم .. دستورات و نتایج اعمال اونها رو میتونیم باهم در تصاویر زیر ببینیم ..


                          نـتـیـجـه ی اعـمـال دسـتـورات

                          همونطور که در نتیجه ی خروجی بالا هم مشاهده میکنیم؛ با این ایده؛ به راحتی تونستیم لبه های تصویرمون رو به دست بیاریم بدون اینکه از دستورات مرسوم Edge Detection استفاده کنیم .. امید که مطالب این پست بتونن برای جمعبندی موضوعات مطرح شده در این تاپیک مفید باشن .. پیروز باشید ..
                          دوستان! مدتی کمتر به سایت میام ..

                          دیدگاه


                            #28
                            پاسخ : Morphological Image Processing Tutorial

                            نمونه کدی که توی سایت خود opencv برای implement کردن Erosion وجود داره برای پردازش عکس هست. میدونید چطوری میآ‌شه این الگوریتم و روی یه فایل ویدئویی اعمال کرد؟

                            اگه نمونه کد دارید یا Pseudocode و یا حتا مرجعی میشناسید که میآ‌تونه کمکم کنه ممنون میشم در اختیارم بذارید.

                            دیدگاه


                              #29
                              پاسخ : Morphological Image Processing Tutorial

                              من یه چیزی رو متوجه نشدم..اگه 2 شیآ‌ توی تصویر روی هم قرار گرفته باشند(یا حداقل بخشی ازشون) morphological algorithm چطوری اطلاعات هر کدوم رو extract میآ‌کنه؟

                              دیدگاه


                                #30
                                پاسخ : Morphological Image Processing Tutorial

                                سلام ..

                                عملگرهای Morphology ویژگی خاصی استخراج نمیکنن! به نوعی به عنوان یک تبدیل (--خیلی نا دقیق--) در فضای تصویر عمل میکنن .. اگر دو تصویر همپوشانی شده داشته باشید؛ بسته به نوع انتظار و کاربردی که دارید، میتونید از عملگرهای به خصوصی استفاده کنید .. شاید لازم باشه سوالتون رو با جزئیات بیشتری مطرح کنید .. برای پردازش ویدئو هم، بهترین و معمول ترین راه حل، تبدیل اونها به فریم و کار کردن مستقیم با فریم ها هست .. پیروز باشید ..
                                دوستان! مدتی کمتر به سایت میام ..

                                دیدگاه

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