اطلاعیه

Collapse
No announcement yet.

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

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

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

    با سلام
    در این صفحه قرار است در مورد تشخصی یک شی خاص در تصویر و یا جدا سازی یک رنگ مشخص از تصویر رنگی صحبت نماییم.
    در اینجا ما بوسیله کتابخانه OpenCv که توسط اینتل و چند دانشگاه معتبر امریکاطراحی شده، کار می نماییم.داشتن یک اطلاعات مختصر در باره این کتابخانه برای این قسمت ضروری است.
    از دیگر دوستان که اطلاعاتی دارند خواهشمندم که برای بهتر شدن این صفحه یاریم نمایند.همچنین در صورتی که دوستان سوال خاصی درباره نحوه کارکردن این کتابخانه دارند میتوانند سوالات خودرا در این صفحه و یا به ایمیل من ارسال نمایند.
    باتشکر
    mostafa.bahriny@yahoo.com

    #2
    پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

    تصویر سباه وسفید از چندین پیکسل که هر پیکسل از رنک سیاه و یا رنگ سفید و یا رنگ خاکستری (رنگی بین سیاه وسفید) ایجاد شده .
    خال در تصویر رنگی قضیه به کونه دیکری است.همانطور که میدانید ما در طبیعت سه رنگ اصلی قرمز،ابی،سبز(مخفف این سه رنگ بصورتRGB نوشته می شود).و دیگر رنگها از ترکیب این این رنگ ها با یک تناسبی ساخته می شود.برای مثال رنگ بنفش از ترکیب دو رنگ ابی و قرمز بوجود می ایند.این سه رنگ اصلی خود به تنهایی ایجاد نیشوند و برای ساخت انها هیچ نیازی به دو رنگ دیکر نیست.برای مثال هیچ در صدی از رنگ قرمز ، رنگ ابی یا سبز وجود ندارد.
    درتصویر سیاه و سفید ما یک صقحه تصویر بیشتر نداریم.ولی در تصویر رنگی ما سه صفحه قرمز، ابی و سبز داریم.حال این سه با هم ترکیب شده و تصویر رنگی رابوجود می اورند.میتوانید تصور کنید که این سه صفحه بروی هم قرار می گیرند و از ترکیب انها یک تصویر رنگی بوجود می اید.که ما انرا مشاهده می نماییم.
    حال فرض کنید که ما میخواهیم رنگ قرمز را از تصویر بیرون بکشیم .همانطور که در بال گفته شد در رنگ قرمز
    هیچ نسبتی از رنگ ابی یا سبز موجود نمی باشد .بنابراین در سه صفحه رنگی قرمز و ابی و سبز تصویر برای پیدا کردن رنگ قرمز انرا باید فقط وفقط در صفحه قرمز بگردیم.در واقع پیکسل رنگ قرمز بصویر رنگی در صفحه ابی و سبز بصورت مشکی وبا سیاه می باشد .چون این دو صفحه در تشکیل ان هیچ نقشی ندارند.ولی همین پیکسل در صفحه قرمز بصورت روشن ویا سفید کامل ظاهر می گردد.
    شما در برنامه ی که می نویسید ابتدا باید تصویر رنگی که دارید به سه صفحه رنگی RGBکه ذکر کردم تبدیل کنید.
    این کار بوسیله تابع زیر ( در کتابخانه OpenCv)انجام می گیرد.
    cvSplit() :

    void cvSplit(
    const CvArr* src,
    CvArr* dst0,
    CvArr* dst1,
    CvArr* dst2,
    CvArr* dst3
    )
    همانطور که می بینید این تابع یک تصویر چندگاناله ( مانند یک تصویر رنگی) به نام src را می گیرد وانرا به صفحات تشکیل دهند ان جدا می نمایید.و در سه صقحه dst0::3 می ریزد.که همان صفخات قرمز ، ابی و سبز است.
    Example 5-2. کتاب OpenCv یک مثال مفید برای این قسمت است.
    بخشی از انرا برایتان می نویسم:
    IplImage* src = cvLoadImage( argv[1] );

    // Allocate individual image planes.

    IplImage* red = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
    IplImage* green = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
    IplImage* blow = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );

    // Split image onto the color planes.
    cvSplit( src, red, green, blue , NULL );

    دیدگاه


      #3
      پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

      سلام.
      وقتی یک تصویرو به سه صفحه ی جدا تقسیم میکنیم به چه معنیه؟ اخه وقتی هرکدوم از صفحات r وb وg رو به صورت مجزا نمایش میدیم تصویر به صورت خاکستری در میاد...
      بعد از جدا کردن این صفحه ها برای تشخیص رنگ مورد نظرمون از چه توابعی در open cv میشه استفاده کرد؟
      اگه امکان داره در مورد استانه گیری و نحوه ی نمایش اون بیشتر توضیح بدین...
      ممنون
      زندگی چیزی نیست که لب طاقچه ی عادت از یاد منو تو برود...

      دیدگاه


        #4
        پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

        سوال خوبی بپرسید.من ابتدا از نظر تئوری و سپس از جنبه عملی و کد نویسی برایتان تشریح میدهم.
        تئوری:
        همانطور که که در پست قبل گفتم رنگ ها به سه صفحه تبدیل میشه . برای مثال پیکسل رنگ قرمزتصویر رنگی، در صفحه ابی و سبز بصورت مشکی وبا سیاه می باشد .چون این دو رنگ در تشکیل ان هیچ نقشی ندارند.ولی همین پیکسل در صفحه قرمز بصورت روشن ویا سفید کامل ظاهر می گردد.همانطور که گفتید سه صفحه بصورت سیاه و سفید است.یعنی در مثالی که گفتیم پیگسل رنگ قرمز در صفحه قرمز بصورت سفید و روشن است .از طرفی میدانیم در حافظه ،هر پیکسل خود از هشت بیت تشکیل شده.وقتی بخواهیم به یک پیکسلی مقدار روشنی یا با ارزشتری بدهیم باید کل بیت انرا یک کنیم و وقتی هشت بیت یک شد، مقدار ان ( از نظر مبنای دهی) عدد 255 خواهد شد.حال همان پیکسل قرمز در صفحات ابی و سبز بصورت مشکی است یعنی که پیکسل کمترین مقدار خودرا دارا است ( مقدار صفر).حال ممکن است رنگی مانند بنفش کم رنگ با نسبتهای زیر ایجاد گردد:
        ابی (مقدار پیکسلی) : 204
        قرمز (مقدار پیکسلی) : 202
        سبز (مقدار پیکسلی) : 94
        یعنی اینکه ابی از سفیدی کامل ( 255 ) مقدار 204 را گرفته است.و مقدار کمی سبز نیز به اندازه 94 با قرمز و ابی ترکیب شود.

        عملی و کد نویسی :

        در عمل معمولا بعلت سخت افزاری و مشگلات دوربین نمی توان رنگ ها را بصورت کامل و واقعیشان ( مقدار تئوری)در کامپیوتر نمایش داد.برای مثال ممکن است رنگ قرمز بصورت رنگ قرمز کم رنک نشان داده بشود.رنگ قرمز کم رنک از نظر تئوری حاوی مقدار رنگ ابی وسبز است.این یک مشکل سخت افزاری که با ان روبرو هستید.
        حال در مورد تعین یک رنگ و استفاده از تابع استانه گیری (Threshold) صحبت میکنیم. شما توسط این تابع میتوانید محدود مقدار پیکسل را مشخص کنید.
        cvThreshold(
        CvArr* src,
        CvArr* dst,
        double threshold,
        double max_value,
        int threshold_type
        );
        دو پارامتر scr و dst تصویر مبدا و مقصد است. پارامتر double threshold و پارامتر double max_value محدوده مقدار پیکسلی را مشخص می کند .برای مثال برای رنگ بنفش کم رنک می توانید صفحه سیز را بعنوان مبدا تعریف کنید و بگویید که فقط پیکسلهایی انتخاب شوند که مقدار انها 90 الی 94 باشد. و در مقصد بریزد.انگاه در صفحه مقصد فقط رنگ بنفش کم رنگ جدا می گررد.

        دیدگاه


          #5
          پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

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

          دیدگاه


            #6
            پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

            کارهای دیگر باید خود شما با خلاقیتتان ایجاد کنید.
            شما میتوانید علاوه بر سیستم رنگی RGB از سیستم رنگی HSV استفاده کنید که کار را راحتر والبته با کیفیت بهتر.
            اما اگر تازه بکارید بهتر است ابتدا از سیستم رنگی RGB استفاده نمایید.

            دیدگاه


              #7
              پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

              نوشته اصلی توسط mostafa.bahriny
              کارهای دیگر باید خود شما با خلاقیتتان ایجاد کنید.
              شما میتوانید علاوه بر سیستم رنگی RGB از سیستم رنگی HSV استفاده کنید که کار را راحتر والبته با کیفیت بهتر.
              اما اگر تازه بکارید بهتر است ابتدا از سیستم رنگی RGB استفاده نمایید.
              میشه در مورد HSV هم توضیح بدید؟

              دیدگاه


                #8
                پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخ

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

                دیدگاه


                  #9
                  پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

                  سلام
                  من یک تصویر rbg رو به سه صفحه ی H, S وV تبدیل کردم .
                  حالا چه جوری میتونم با استفاده از این یک رنگ خاص رو مشخص کنم؟
                  اگه ممکنه منو راهنمایی کنین...
                  زندگی یعنی شب نو
                  روز نو
                  اندیشه ی نو...

                  دیدگاه


                    #10
                    پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

                    سلام
                    تصاویر دریافتی از وبکم با نویز زیادی همراهه
                    اگه امکان داره در مورد توابعی که در opencvوجود داره تا انواع نویز ها رو از بین ببره کیفیت تصویر مطلوبی داشته باشیم توضیح بدین
                    ممنون

                    دیدگاه


                      #11
                      پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

                      یک سیستم رنگی است که شما پس از اینکه تصویر رنگی به HSV تبدیل نمایید.شما سه صفحه V ، که نمایانگر مقدار روشنایی پیگسل است(value) و صفحه S مقدار اشباع (saturation) وصفحه H مقدار رنگ (hue) را مشخص میکند.
                      حالا شما می توانید بوسیله توابع موجود در OpenCv مقدار رنگ(H) و یا مقدار اشباع(S) را معین کنیم .
                      تابع زیر محدوده رنگی را مشخص می نمایید.
                      cvInRange(
                      const CvArr* src,
                      const CvArr* lower,
                      const CvArr* upper,
                      CvArr* dst
                      )

                      scr تصویر مبدا است . lower و upper محدوده پایین و بالای رنگی را مشخص می کند.تصویر dst تصویر مقصداست که پس از اعمال محدوده در ان ریخته می شود.
                      مقدار محدوده رنگی خود یک مبحث علمی وتئوری دارد که شما میتوانید در کتابهای پردازش تصویر مانند پردازش تصویر دیجیتال ( نویسنده گنزالس) بخوانید.شما میتوانید بصورت ازمایشی وعملی انرا تعیین کنید.

                      دیدگاه


                        #12
                        پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

                        نوشته اصلی توسط samin1991
                        سلام
                        تصاویر دریافتی از وبکم با نویز زیادی همراهه
                        اگه امکان داره در مورد توابعی که در opencvوجود داره تا انواع نویز ها رو از بین ببره کیفیت تصویر مطلوبی داشته باشیم توضیح بدین
                        ممنون
                        معمولا افراد برنامه نویس ( پردازش تصویری) با نویز خیلی مشکل دارند.بنابراین برای حل ان تا انجایی که ممکن است از سخت افزار ( دوربین ) با کیفیت بالا استفاده می نمایند.
                        وقتی آب از سرچشمه گل الود است کاری بجز بهتر کردن دوربین ندارید.

                        دیدگاه


                          #13
                          پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

                          اگه تصویری که از دوربین به صورت انلاین دریافت میکنیم دارای نویزهای فلفلی باشه چه طور میشه این مشکلو برطرف کرد؟
                          اگه نور محیط زیاد باشه فیلتر .... که استفاده میکنیم چیه؟
                          اگه امکان داره یه منبع معرفی کنین

                          دیدگاه


                            #14
                            پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

                            نوشته اصلی توسط samin1991
                            اگه تصویری که از دوربین به صورت انلاین دریافت میکنیم دارای نویزهای فلفلی باشه چه طور میشه این مشکلو برطرف کرد؟
                            اگه نور محیط زیاد باشه فیلتر .... که استفاده میکنیم چیه؟
                            اگه امکان داره یه منبع معرفی کنین
                            اگه تصویر شما دارای نویز فلفلی است. شما میتوانید از تابع زیر استفاده کنید:
                            void cvErode(
                            IplImage* src,
                            IplImage* dst,
                            IplConvKernel* B = NULL,
                            int iterations = 1
                            );
                            این تابع باعث می شود که پیکسل یک ناحیه همرنگ تر باشند.و در واقع رنگ یک ناحیه یکدست شود.
                            همانطور که می بینید این تابع دو تصویر مبدا و مقصد را می گیرد(src,dst).
                            و پارامتر int iterations نمایانگر این است که جند بار این عمل تکرار شود( منظور از عمل خود تابع است).
                            تابع زیر عکس تابع فوق عمل می کند:
                            void cvDilate(
                            IplImage* src,
                            IplImage* dst,
                            IplConvKernel* B = NULL,
                            int iterations = 1
                            );
                            برای مطالعه بیشتر شما می توانید صفحه 115 کتاب Orelly که برای OpenCv است مطالعه نمایید.در انجا چند تابع معرفی شده. وبرای مطالعه تئوری می توانید به کتاب پردازش تصویر گنزالس فصل پنچم مراجعه نمایید.
                            من خودم با تغیرات شدید نور مشکل دارم .اگه شما تغیرات شدید نور ندارید میتوانید فیلتر را براساس نور شدید طراحی کنید.

                            دیدگاه


                              #15
                              پاسخ : پردازش تصویر و جداسازی رنگ و اجسام مشخص از تصویر رنگی بوسیله کتابخانه OpenCv

                              سلام
                              این توابع برخی از اطلاعات تصویر مثلا لبه ها رو از بین میبرن
                              ایا توابعی وجود دارن که با اونا همه ی اطلاعات از دست نره؟
                              اگه هست لطفا یه مثال بزنید

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

                              دیدگاه

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