اطلاعیه

Collapse
No announcement yet.

حذف Backgrond از تصویر

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

    #16
    پاسخ : حذف Backgrond از تصویر

    median filter و پیشنهاد دادین... دیتایی که من دارم خروجیه یه 3D camera هست.. برای حل مشکل illumination باز هم این فیلتر میتونه کمک کنه؟

    البته با امید به اینکه همه دوستانی که 3 سال پیش اینجا کامنت گذاشتن همچنان حضور داشته باشن

    دیدگاه


      #17
      پاسخ : حذف Backgrond از تصویر

      سلام ..

      معمولا از Median Filter ها که از نوع فیلترهای دیجیتال و غیر خطی هستند؛ در کاربردهای Denoising استفاده میشه، به این دلیل که با توجه به گردش پنجره بر روی پیکسل ها و بازخوانی همسایگی اونها؛ تصویر رفته به رفته از نظر کیفیت بهتر میشه و نویز تصویر (به خصوص نویز های برفکی یا Salt and pepper) آرام آرام حذف میشن .. برای مثال، شاید تصویر زیر بتونه به درک بهتر موضوع کمک کنه ..


      امــا برای Illumination و روشن تر کردن تصویر یا به بیان بهتر، افزایش Intensity پیکسل های تشکیل دهنده ی تصویر؛ یک راه حل خیلی کاربردی و ساده و البته قابل اعتمادی که وجود داره این هست که از Histogram Equalization استفاده کنید .. دستورات و نتیجه ی اون رو هم میتونید در تصاویر زیر ببینید .. منطقی که H E داره، این هست که به نوعی روی توزیع رنگی پیکسل ها، بازنگری مجدد انجام میده (خیلی شهودی!) ..


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

      امیدوارم که توضیحات بالا بتونن براتون مفید باشن .. موفق و سلامت و شاد باشید ..
      دوستان! مدتی کمتر به سایت میام ..

      دیدگاه


        #18
        پاسخ : حذف Backgrond از تصویر

        توی تصاویر 3D اگه مثلا background سیاه و قسمتی از object هم سیاه باشه, به نظر شما چطور میآ‌شه object و ازش جدا کرد و اونو تشخیص داد؟

        دیدگاه


          #19
          پاسخ : حذف Backgrond از تصویر


          پیشنهاد من اول از آستانه وفقی استفاده کنین

          بعد اگه نویزی داره با مورفولوژی بگیرین
          بعد شناسایی اشیاء

          یک مثالش توی opencv مربوط به صفحه شطرنج هست

          http://www.4shared.com/office/wspNnTsI/AMUZESH_JAMEE_MATLAB.html

          دیدگاه


            #20
            پاسخ : حذف Backgrond از تصویر

            سلام ..

            در فایلی که در انتهای این پست ضمیمه شده هست؛ مجموعه ای از الگوریتم های مرسوم در Background Subtraction (حذف زمینه از تصویر) به همراه مقایسه ی نتایج اونها با یکدیگر مطرح شدن که امیدوارانه میتونن به جمعبندی مطالب این تاپیک کمک کنن .. نکته ی کوتاه اینکه؛ در ابتدا مرور هر الگوریتم به صورت شهودی (کلی) و اینکه هر کدام چه کار میکنن و چه نوع نگاهی در رابطه ی با حل مساله دارند، میتونه استفاده ی از این فایل رو آسان تر کنه و در انتها پرداختن به ریـز الگوریتم های محاسباتی اونها .. موفق و سلامت و شاد باشید ..
            فایل های پیوست شده
            دوستان! مدتی کمتر به سایت میام ..

            دیدگاه


              #21
              پاسخ : حذف Backgrond از تصویر

              نوشته اصلی توسط متلب
              پیشنهاد من اول از آستانه وفقی استفاده کنین
              بعد اگه نویزی داره با مورفولوژی بگیرین
              بعد شناسایی اشیاء

              یک مثالش توی opencv مربوط به صفحه شطرنج هست
              سلام.مرسی از توضیحتون و چند تا سوال...
              ظاهرآ که خود thresholding هم انواع مختلفی داره..شما کدوم نوع adaptive thresholding و پیشنهاد میکنین توی حالت real time ؟
              نظرتون چیه که ترتیب و عوض کنم و اول noise reduction انجام بدم و بعد برم سراغ thresholding ؟ منطقیه؟
              منظورتون از صفحه ی شطرنج همون camera calibration هست؟



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


              دیدگاه


                #22
                پاسخ : حذف Backgrond از تصویر



                البته پیاده سازی یک روش خاص بستگی به کارتون داره
                گاوسی بهتر از میانگین معمولیه ولی ممکن شما لازم نداشته باشین
                میانگین معمولی رو میشه با هر اندازه کرنلی بصورت خیلی سریع پیاده سازی کرد ولی گاوسی اینطور نیست

                برای مثال هم تو opencv.org می تونین مثالشو ببینین
                پیشنهاد من هم مراحل اولیه کار بود باید بهترین روش رو برای مساله خودتون انتخاب کنین


                البته حذف نویز مرحله اول کار هست ولی بستگی به سرعت دوربین و الگوریتم هم داره
                اگه فریم بر ثانیتون نسبت به تغییرات بزرگ باشه می شه الگوریتمهای با کیفیت بالاتر پیاده سازی کرد


                از روش های مدل کردن پس زمینه دیگه هم مثل ، کد بوک می تونین استفاده کنین

                مقاله اقای حسام هم خیلی جامع بود
                ایشون تو پردازش تصویر البته خیلی بیشتر از من واردن





                http://www.4shared.com/office/wspNnTsI/AMUZESH_JAMEE_MATLAB.html

                دیدگاه


                  #23
                  پاسخ : حذف Backgrond از تصویر

                  سلام ..

                  در ایـن آدرس؛ تعدادی پیاده سازی از متدهای Background Subtraction در محیط OpenCV مطرح شدن که میتونن در کنار مطالب خوب مطرح شده در پست های قبل؛ مفید باشن و امیدوارانه به جمعبندی مطالب این تاپیک کمک کنن .. پیروز باشید ..
                  دوستان! مدتی کمتر به سایت میام ..

                  دیدگاه


                    #24
                    پاسخ : حذف Backgrond از تصویر

                    سلام
                    با عرض تشکر از زحمات و راهنماییهای دوستانه تون
                    من تعدادی تصویر دارم که در هر تصویر تعدادی پروانه سفید روی یک برگ نشسته اند
                    در بعضی از این تصویرها رگبرگها خیلی روشن هستند از دستور im2 bw که استفاده می کنم رگبرگها و قسمتی از برک که نور زیاد خورده هم سفید انتخاب می شه. در ضمن روشنایی عکسها و اندازه پروانه ها در عکسها متفاوت است. پروانه ها بعضی جاها به هم پیوسته اند و باید انها را از هم جدا کرد.
                    می تونید راهنماییم کنید از چه روشی برای جداسازی پروانه ها از هم و از پس زمینه برگ استفاده کنم که کلی باشد و روی همه عکسها جواب بده.
                    حتی اگه روشی به نظرتون می رسه که در هر عکس فقط یه پروانه را هم تشخیص بده که ابعاد اونو بفهمه کافیه بقیه کار رو با مورفولوژی می تونم انجام بدم.
                    یه سوال دیگه که داشتم اینه که چطور زاویه قرار گرفتن یه پروانه را حساب کنم.

                    خیلی ممنون

                    اینم دو نمونه از عکسهام


                    دیدگاه


                      #25
                      پاسخ : حذف Backgrond از تصویر

                      سلام ..

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

                      دیدگاه


                        #26
                        پاسخ : حذف Backgrond از تصویر

                        بسیار سپاسگزارم از توجه و کمکتون
                        ببینید من خودم برنامه زیر را نوشتم و بسیار خوب جواب گرفتم برای عکس اول:
                        کد:
                        %background elimination
                        clc
                        rgb=imread('ax2.jpg');imtool(rgb)
                        %colormap(gray);imagesc(rgb); rec = getrect;close all;
                        %rgb = rgb(fix(rec(2):rec(2)+rec(4)),fix(rec(1):rec(1)+rec(3)),:);
                        %imshow(rgb)
                        gImg=rgb2gray(rgb);%imtool(gImg)
                        bImg = imopen(gImg,strel('disk',25));%imtool(bImg) 
                        nImg = imsubtract(gImg,bImg);%imtool(nImg)
                        L = medfilt2(nImg,[5 5]);%figure, imshow(L)
                        h=graythresh(L);
                        bw=im2bw(L,h);%imtool(bw)
                        i=bwareaopen(bw,100);imtool(i)
                        %%
                        %separating joint whiteflies
                        ii=imerode(i,strel('disk',7));%imtool(ii)
                        outer=((i+ii)==1);%imtool(outer)
                        inner=i-outer;%imtool(inner)
                        g=double(gImg)+255.*double(~outer);
                        g(:,:)=255.*(g(:,:)>255)+g(:,:).*(g(:,:)<256);%imtool(g,[0 255])
                        cc=double(gImg)+255.*double(~inner);
                        cc(:,:)=255.*(cc(:,:)>255)+cc(:,:).*(cc(:,:)<256);%imtool(cc,[0 255])
                        cc2= medfilt2(cc,[5 5]);%imtool(cc2,[0 255])
                        ev=255-(255-cc2+255-g);% imtool(ev,[0 255])
                        %tm=1 median. tm=0 mean
                        bw1=adaptivethreshold(ev,10,.02,1);%imtool(bw1)
                        k=1-bw1;%imtool(k)
                        br=bwmorph(k,'bridge');%imtool(br)
                        a=(1-br).*i;%imtool(a)
                        fImg=imfill(a,'holes');%imtool(fImg)
                        f=bwareaopen(fImg,60);%imtool(f)
                        di=bwmorph(f,'diag');imtool(di)
                        %%
                        %shape processing
                        cl=bwmorph(di,'thick');%imtool(cl)
                        cl=bwmorph(cl,'thick');%imtool(cl)
                        la=bwlabel(cl);
                        conn= bwconncomp(cl);
                        dl=zeros(size(cl));
                        for u=1:conn.NumObjects
                          bl=cl;
                          bl=false(size(cl));
                          bl(conn.PixelIdxList{u})=true;
                          bl1=bwmorph(bl,'bridge');
                          dl=dl+bl1;
                          
                        end
                        %imtool(dl)
                        final=imfill(dl,'holes');imtool(final)
                        
                        %counting whiteflies
                        number_of_objects_is =conn.NumObjects
                        gray=double(gImg)+255.*double(~final);gray(:,:)=255.*(gray(:,:)>255)+gray(:,:).*(gray(:,:)<256);imtool(gray,[0 255])

                        ولی همانطور که می بینید وابسته به پارامترهای سایز هست مثلا برای انتخاب سایز دیسک برای erosion dilation opening bwareaopen و ترشهلد
                        و برای هر عکسی برای اینکه جواب بگیریم این پارامترها فرق می کند. با توجه به مشخصات نوری تصویر و سایز پروانه ها
                        به استادم که نشون دادم گفت باید برنامت برای همه شکلها بصورت خودکار جواب بده مثلا باید خودش بتونه یه تخمینی از سایز هر پروانه را در هر عکس بدست بیاره و این پارامترهای مورفولوژی رو از روی اون حساب کنه.
                        برای دیتکت کردن یک پروانه
                        من روی این موضوع کار کردم که مثلا توسط یه تابع ساده im2bw با ترشهلد graythresh عکس را باینری کردم بعد لیبل کردم روی هر آبجکت min max mean را حساب کردم و گفتم هر آببجکتی که اینا همه با هم بیشتر بود را پروانه بگیر که یک پروانه را دیتکت کنم ولی در عکسهام یا چندتا پروانه دیتکت میشه یا اینکه پروانه همراه با رگ برگ روشن و...
                        حالا می خوام ببینم از روی اسکلت آبجکت بدست امده می تونم تشخیص بدم که یک پروانه است یا چندتا یا حتی همراه با رگبرگ است؟
                        ولی این کارو بلد نیستم.

                        ببخشید سرتونو درد آوردم شاید از اول باید از یک روش دیگر برای این کار استفاده می کردم
                        شما راه حلی به ذهنتون می رسه
                        بازم خییییلی ممنون

                        دیدگاه


                          #27
                          پاسخ : حذف Backgrond از تصویر

                          سلام ..

                          من کدتون رو همین الان تست کردم .. نتیجه ی کد شما با نتیجه ی دموی بالا، تقریبا یکی هست .. ایـن تاپیک رو بررسی کنید و ببینید که آیا میتونه کمکتون کنه یا خیر .. بعلاوه؛ برای اجرای کد شما، نیاز به فایل ضمیمه شده ی زیر هم هست که اون رو در انتهای همین پست قرار دادم .. فعلا بحث Skeleton رو بگذاریم کنار (--تا جایی که امکان اون هست! --) .. یک سوال: به چه دلیل فکر میکنید؛ جدا کردن آبجکت ها از تصویر زمینه، وابسته به پارامترهای تصاویر هست و از تصویری به تصویر دیگه میتونه تغییر کنه؟ این پارامترها چه چیزهایی هستن؟ (--حتما دموی بالا رو Run کنید--) .. پیروز باشید ..
                          فایل های پیوست شده
                          دوستان! مدتی کمتر به سایت میام ..

                          دیدگاه


                            #28
                            پاسخ : حذف Backgrond از تصویر

                            برای پیدا کردن زاویه میتونید از color detection استفاده کنید یا اینکه میخواهید حتما باید از روی binary image تشخیص داده بشه؟

                            دیدگاه


                              #29
                              پاسخ : پاسخ : حذف Backgrond از تصویر

                              نوشته اصلی توسط حسام الدین
                              سلام ..

                              من کدتون رو همین الان تست کردم .. نتیجه ی کد شما با نتیجه ی دموی بالا، تقریبا یکی هست .. ایـن تاپیک رو بررسی کنید و ببینید که آیا میتونه کمکتون کنه یا خیر .. بعلاوه؛ برای اجرای کد شما، نیاز به فایل ضمیمه شده ی زیر هم هست که اون رو در انتهای همین پست قرار دادم .. فعلا بحث Skeleton رو بگذاریم کنار (--تا جایی که امکان اون هست! --) .. یک سوال: به چه دلیل فکر میکنید؛ جدا کردن آبجکت ها از تصویر زمینه، وابسته به پارامترهای تصاویر هست و از تصویری به تصویر دیگه میتونه تغییر کنه؟ این پارامترها چه چیزهایی هستن؟ (--حتما دموی بالا رو Run کنید--) .. پیروز باشید ..
                              سلام دموی شما رو تست کردم ممنون ازتون ببخشید یادم رفت تابع adaptivethreshold را ضمیمه کنم به زحمت افتادین.

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















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

                              %% A Sample Demo

                              clear all
                              close all
                              clc

                              Img = rgb2gray(imread('10.jpg&#039);
                              imshow(Img),title('Original Image','FontSize',12)
                              pause(3)

                              Img = medfilt2(Img,[4 4]); %--- Optional ---%
                              % Img = imfilter(Img,fspecial('unsharp&#039);
                              threshold = graythresh(Img) + 0.09;
                              Img_binary = im2bw(Img,threshold);
                              imshow(Img_binary),title('Binary Image','FontSize',12)
                              pause(3)

                              Img_binary = bwareaopen(Img_binary,50);
                              imshow(Img_binary),title('Removing Noise','FontSize',12)
                              pause(3)

                              res = imfilter(Img_binary,fspecial('log&#039);
                              imshow(res),title('Laplacian of Gaussian','FontSize',12)
                              pause(3)

                              result = bwmorph(Img_binary,'bridge'
                              imshow(result),title('Connecting Neighbor Pixels','FontSize',12)
                              pause(3)

                              %----- Optional -----%
                              result = bwmorph(result,'diag'
                              imshow(result),title('Diagonal Filling','FontSize',12)
                              pause(3)

                              result = bwmorph(result,'fill'
                              imshow(result),title('Filling Isolated Holes','FontSize',12)
                              pause(3)

                              dilation = imdilate(result,[0 1 0; 1 1 1; 0 1 0]);
                              boundary = double(dilation) - double(result);
                              imshow(boundary),title('Image Boundary Map','FontSize',12)
                              pause(3)

                              figure,imshow(Img),title('Filtered Image','FontSize',12)

                              %% End of this Demo!
                              یا در قسمت حذف پس زمینه کد من شعاع دیسک برای اپن کردن و افزودن به ترشهلد تابع گری ترش و حدود نویز تصویر و اجزای کوچک تصویر
                              وابسته به سایز و شدت هستند.

                              %background elimination
                              clc
                              rgb=imread('whitefly.jpg'imtool(rgb)
                              gImg=rgb2gray(rgb);%imtool(gImg)
                              bImg = imopen(gImg,strel('disk',25));%imtool(bImg)
                              nImg = imsubtract(gImg,bImg);%imtool(nImg)
                              L = medfilt2(nImg,[5 5]);%figure, imshow(L)
                              h=graythresh+.2(L);
                              bw=im2bw(L,h);%imtool(bw)
                              i=bwareaopen(bw,100);imtool(
                              i)

                              دیدگاه


                                #30
                                پاسخ : حذف Backgrond از تصویر

                                نوشته اصلی توسط negin-bahadori
                                برای پیدا کردن زاویه میتونید از color detection استفاده کنید یا اینکه میخواهید حتما باید از روی binary image تشخیص داده بشه؟
                                ممنون می شم توضیح بدین نه لازم نیست حتما باینری باشه.

                                دیدگاه

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