اطلاعیه

Collapse
No announcement yet.

محاسبه مساحت بعد از segmentation

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

    #16
    پاسخ : محاسبه مساحت بعد از segmentation

    ممنون از توجهتون .
    میشه لطف کنید در مورد هرس کردن یه توضیحاتی بفرمایید .
    من هسته ها رو جدا کردم و سایز ها رو با شمردن پیکسل ها به دست آوردم . ولی نمی دونم منظور از هرس چیه ؟
    و چقدر میتونه به دقت کار کمک کنه .
    من مطالبی رو که در مورد مورفولوژی گداشتید رو خوندم ولی به چیزی در مورد هرس نوشته نبود .
    سوال دوم هم این که اگر ما بتونیم شکلی مثل اون دایره های کوچک که توی پست های قبلی گذاشتید رو با استفاده از کانتورهای فعال حدودش رو پیدا کنیم ( که دورشون قرمز شده ) حالا آیا دستوری هست که بتونه مساحت با همان تعداد پیسکل های داخل boundary ها رو حساب کنه . ( فرض کنیم شکل فقط یک دایره دارد این شکل فقط برای مثال می باشد )

    مرسی

    دیدگاه


      #17
      پاسخ : محاسبه مساحت بعد از segmentation

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

      horizontal resolution: 80dpi
      vertical resolution : 112 dpi
      یعنی ابعاد هر پیکسل برابر هست با:
      1/80(inch) x 1/112 (inch) = 0.3175mm x 0.2267mm = 0.0719 mm^2
      هر اینچ 2.54 سانتی متر و یا 25.4 میلی متر هست.

      اگه از دستور regionprops برای محاسبه مساحت استفاده کنی، تعداد پیکسل ها در یک ناحیه رو به شما میده. بنابراین مساحت ناحیه به میلیمتر مربع برابر مساحتی که متلب میده ضرب در 0.0719 هست.
      مـن هیچ ندانم که مرا آن که سرشت
      از اهل بهشت کرد یا دوزخ زشت
      جامی و بتی و بربطی بر لب کشت
      این هر سه مرا نقد و تو را نسیه بهشت

      دیدگاه


        #18
        پاسخ : محاسبه مساحت بعد از segmentation

        مرسی از لطفت .
        مساحت رو به دست آوردم . ولی کاربرد BoundingBox رو نمیدونم چیه .
        یه مشکلی هم که هست سایز عکسم وقتی میخونمش با وقتی imshow میکنم انگار یه کم فرق داره . موقع imshow یه کم بزرگتر میشه .
        دلیلش چیه ؟ میشه دقیقا همون سایز عکسی که imread کردم رو بهم بده ؟
        مرسی

        دیدگاه


          #19
          پاسخ : محاسبه مساحت بعد از segmentation

          BoundingBox مختصات یه مستطیل هست که هر connected component در تصویر باینری رو در بر میگیره. این دستور برای قبل از segmentation هست. در واقع تمام سگمنت ها رو برات پیدا می کنه.

          منظورت از سایز عکس بزرگتر مشه چیه. یعنی چه چیزی بزرگتر میشه. یعنی احساس میکنی زوم شده یا نسبت ابعاد تغییر کرده.
          مـن هیچ ندانم که مرا آن که سرشت
          از اهل بهشت کرد یا دوزخ زشت
          جامی و بتی و بربطی بر لب کشت
          این هر سه مرا نقد و تو را نسیه بهشت

          دیدگاه


            #20
            پاسخ : محاسبه مساحت بعد از segmentation

            حس می کنم یه کم زومش بیشتر شده .
            بعد اون موضوعی که توی پست قبلی گفتم . فرض کردیم boundary یه آبجکت فرضا دایره رو پیدا کردیم حالا با چه دستوری مساحت رو پیدا کنم .
            دستور regionprops جواب میده ؟

            دیدگاه


              #21
              پاسخ : محاسبه مساحت بعد از segmentation

              سلام ..

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


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

              من هسته ها رو جدا کردم و سایز ها رو با شمردن پیکسل ها به دست آوردم . ولی نمی دونم منظور از هرس چیه ؟
              دوستان! مدتی کمتر به سایت میام ..

              دیدگاه


                #22
                پاسخ : محاسبه مساحت بعد از segmentation

                سلام آقا حسام . میشه خواهش کنم توضیح بدید این دستورات خط به خط چکار می کنه ؟
                مرسی از لطفتون


                کد:
                center_x = round(size(u,1)/2);
                center_y = round(size(u,2)/2);
                crop_img = imcrop(im2bw(u),[center_y - 15 center_x - 15 30 30]);
                crop_img = imdilate(crop_img,[0 1;1 0]);
                count_core = 0;
                
                for i = 1:size(crop_img,1)
                  
                  for j = 1:size(crop_img,2)
                    
                    if crop_img(i,j) == 1
                      
                      count_core = count_core + 1;
                      
                    end
                    
                  end
                  
                end

                دیدگاه


                  #23
                  پاسخ : محاسبه مساحت بعد از segmentation

                  سلام ..

                  برای اینکه دوستانی که این تاپیک رو میخونن هم بتونن با مطالب همراه باشن؛ یکبار صورت مساله رو باهم مرور میکنیم .. سلول هایی داریم که دارای غشاء و هسته هستند و هدف ما این هست که با استفاده از کانتورها و روش های پردازشی؛ مساحت (تعداد پیکسل ها) ناحیه ی غشاء و هسته رو محاسبه کنیم .. برای این منظور از الگوریتم LBF_RSF استفاده میکنیم که فایل ها و مطالب مرتبط با اون (کد و رفرنس) در چند پست قبل پلود شدن .. با کمی کارهای پردازشی، نتیجه ی نهایی به صورت تصاویر زیر به دست خواهد آمد ..



                  البته در اعلام تعداد پیکسل های هر ناحیه؛ چه بهتر این هست اگر با کمی تقریب (که همیشه بخشی از اندازه گیری محسوب میشه -- پارامتر خطای اندازی گیری) این مقدار رو اعلام کنیم؛ برای مثال بین سـه تا پـنـج پیکسل! الان نکته ای که لازم هست برای اون راه حل پیدا کنیم؛ این هست که چگونه انتخاب کانتور اولیه به صورت اتوماتیک انجام بشه و نه به صورت manual توسط کاربر (مشخص شده در کد با ***) .. برای راه حل این موضوع؛ یک ایده ی خیلی کوتاه (؟) میتونه راه گشا باشه .. در مورد چند خط کدی هم که در بالا سوال کرده بودید؛ باید در ابتدا علت این کار رو بررسی کنیم و بعد راه حل اون رو .. مشکلی که برای شمردن تعداد پیکسل های هسته وجود داشت؛ این بود که هم حفره ی هسته و هم خارج ناحیه ی غشاء؛ به دلیل باینری بودن Silhouette از مقدار عددی یکسان برخوردار بودن و اگر قرار بود به نحوی، پیکسل هایی با این مقدار شمرده بشن؛ نتیجه ای که در پی داشت یک خطا در اعلام محاسبات بود .. از این جهت لازم بود که به نوعی ناحیه ی در بردارنده ی هسته؛ از تصویر بریده بشه و سپس به شمردن پیکسل های سفید بپردازیم .. این کار رو با دستور imcrop انجام دادیم .. به این دلیل که هسته "تـقـریـبـا" (و نه دقیقا) در حوالی مرکز تصویر قرار داره؛ در ابتدا مرکز تصویر رو به دست آوردیم و سپس با یک "عقب رفت" به اندازه ی 15 پیکسل از مرکز تصویر (در راستای x و y)؛ عملیات برش تصویر رو انجام دادیم با مربعی به ابعاد 30 پیکسل؛ و آغاز شده از مختصات شروع ("عقب رفت&quot .. با استفاده از این ایده، برای محاسبه ی مساحت هسته؛ تمرکز الگوریتم بر روی ایـن قسمت تصویر خواهد بود .. از این جهت که شاید 30 پیکسل برای همه ی تصاویر پاسخگو نباشه؛ لازم هست که این پارامتر هم دینامیک بشه .. این تغییر، هم در کد ضمیمه شده اعمال شده .. موفق و سلامت و شاد باشید ..
                  فایل های پیوست شده
                  دوستان! مدتی کمتر به سایت میام ..

                  دیدگاه


                    #24
                    پاسخ : محاسبه مساحت بعد از segmentation

                    با سلام و تبریک سال نو
                    یه سوال اینجا برام به وجود اومده .
                    در دستوری که 15 پیکسل به عقب و جلو رفتیم اگه این 15 رو با 25 پیکسل تغویض کنیم سایز هسته تغییر خواهد کرد .
                    چرا این موضوع پیش میاد ؟
                    چون ما تعداد پیکسل های سفید رو می شمریم و در داخل شکل جز هسته پیکسل سفید دیگه ای نداریم
                    مرسی
                    کد:
                    crop_img = imcrop(im2bw(u),[center_y - 25 center_x - 25 30 30]);

                    دیدگاه


                      #25
                      پاسخ : محاسبه مساحت بعد از segmentation

                      سلام ..

                      این اتفاق به این دلیل رخ میده که زمانیکه ما 25 پیکسل به عقب برمیگردیم؛ کادر و محدوده ای که برای شمارش تعداد پیکسل های هسته مورد پردازش قرار میگیره؛ شامل نواحی خارجی سلول هم میشه که به نوعی خطای شمارش ما رو بالا میبره .. با توجه به اندازه ی کوچک هسته ها؛ 15 پیکسل، به نوعی هسته رو ایزوله میکنه در زمان Crop شدن و به این دلیل هست که میتونیم به نتیجه ی شمارش پیکسل ها اعتماد کنیم .. برای آشکار شدن بهتر موضوع؛ تصویر زیر رو مشاهده کنید .. موفق و سلامت و شاد باشید ..

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

                      دیدگاه


                        #26
                        پاسخ : محاسبه مساحت بعد از segmentation

                        سلام .
                        حسام جان به نظر شما چرا توی چهار طرف عکسم این شکل ها ظاهر میشه و چطور برطرفش کنم؟
                        قبلا این مشکل رو نداشتم الان چند وقته به وجود اومده و توی محاسبات که شمردن پیکسل های مشکی هست مشکل ایجاد میکنه چون حودشم مشکیه.

                        دیدگاه


                          #27
                          پاسخ : محاسبه مساحت بعد از segmentation

                          سلام ..

                          این اتفاق به دلیل استفاده از Median فیلتر و انتخاب سایز پنجره ی بزرگ برای این فیلتر پیش میاد .. در شرایط خیلی بدبینانه تر؛ اگر پنجره ی مربعی با پنجره ی مستطیلی جایگزین بشه؛ این گوشه ها؛ تبدیل به کادرهای یک طرفه میشن که در برخی موارد خاص و نادر؛ مفید هست از اونها استفاده کردن امــا نه همیشه .. امــا نکته ای که وجود داره این هست که ما در فایل ضمیمه شده ی بالا؛ به دلیل استفاده از عملگرها و تکنیک های Morphology این خطا رو از بین بردیم و در شمارش تعداد پیکسل ها؛ این گوشه ها دیگه وجود ندارند .. بنابر این با خاطری آسوده به محاسبات اعتماد میکنیم .. در کدی که در بالا ضمیمه شده هست؛ متغییر u این تصویر پاکسازی شده رو ذخیره میکنه و برای شمارش تعداد پیکسل های هسته به متغییر crop_img تحویل میده .. بنابراین، این گوشه ها هرگز شمارش نمیشن .. (در تصاویر ضمیمه ی شده ی بالا هم این موضوع رو بررسی کردیم با هم --تصاویر باینری انتهایی رو ببینید--) .. بسیار خوب میشه اگر کدی که الان اجرا میکنید کمی در موردش توضیح بدید (یا فایلش رو بفرستید برام) تا موردی که براتون پیش میاد رو بررسی کنیم .. در زیر هم یک نمونه از اجرای Median فیلتر و به وجود اومدن گوشه ها رو میتونید مشاهده کنید .. موفق و سلامت و شاد باشید ..

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

                          دیدگاه


                            #28
                            پاسخ : محاسبه مساحت بعد از segmentation

                            با سلام .
                            من کد ها رو نگاه کردم آیا منظورتون دستور imdilate هست ؟
                            چون عملگر مورفولوژیک دیگه ای ندیدم .

                            کد:
                            I = imread(''); 
                            J = rgb2gray(I);
                            J=imadjust(J);
                            J= medfilt2(J,[10 10]);
                            k = im2bw(J,0.66);
                            imshow(k),title('bw')

                            این دستور خیلی سادست . من دستورات imerode و bwareaopen که برای حذف آبجکت های کوچکتر هست رو امتحان کردم ولی جواب نداد
                            مرسی

                            دیدگاه


                              #29
                              پاسخ : محاسبه مساحت بعد از segmentation

                              سلام ..

                              دقیقا .. imdilate یکی از دستورات Morphology هست که در برنامه ی ضمیمه شده ی بالا از اون استفاده کردیم .. اگر صرفا قصد رهایی از نگرانی این گوشه ها رو دارید؛ یک پیشنهاد دیگه میتونه این باشه که تصویرتون رو به اندازه ی نصف اندازه ی Mask ای که برای فیلتر به کار میبرید؛ محدود کنید .. برای مثال تصاویر زیر رو باهم در بتدا ببینیم ..


                              این تصاویر؛ یکی از گوشه های تصویر هستن؛ زمانیکه تصویرمون رو با دو پنجره با اندازه های متفاوت 8 و 10 فیلتر میکنیم .. با توجه به اینکه؛ قاعده و ارتفاع مثلث های ایجاد شده از اندازه ای برابر با نصف طول پنجره ی فیلتر برخوردار هستن؛ میتونیم از این نکته در چهار طرف تصویر استفاده کنیم و به نوعی یک کادر جدید برای تصویر در نظر بگیریم تا اون گوشه ها رو شامل نباشن و در انتها تصویرمون رو Crop کنیم با این کادر جدید؛ چیزی شبیه به تصویر زیر ..


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

                              دیدگاه


                                #30
                                پاسخ : محاسبه مساحت بعد از segmentation

                                با سلام .
                                به نطر شما برای مشکل overlapping میشه راه حلی پیدا کرد .
                                آخه معمولا اجزا از هم جدا نیستند و بعضی از آن ها روی هم هستند
                                مرسی

                                دیدگاه

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