PDA

View Full Version : پردازش تصویر در C#‎



EhsanHejazi
چهارشنبه 02 فروردین 1391, 16:39 عصر
سلام به همه ی دوستای خوبم...
راستش من الان 4-5 ماهی است که پردازش تصویر توی C#‎‎‎ رو شروع کردم و از همون اول خودم رو از کار با opencv و Mathlabمنع کردم چون به نظرم هیچ فایده ای نداره که با نوشتن یک دستور یک عکس رو مثلا negative کرد بلکه باید اصول این کار رو از پایه بررسی کرد و من حتی توی کارم در C#‎‎‎ از دستورات setpixel و getpixel هم استفاده نکردم و از اشاره گر ها استفاده می کنم چون سرعت اون ها خیلی پایینه مخصوصا توی برنامه های پیچیده...می خواستم نظر شما رو هم در این مورد بپرسم...من الان دارم به همراه دوست بسیار خوبم آقای یوسف شه نهاد روی یک پروژه Machine Vision برای جشنواره خوارزمی کار می کنم...اگه کسی بتونه در این رابطه هم کمکم کنه خیلی ممنون می شم...مخصوصا اگه کسی توی رشته ی کامپیوتر در جشنواره ی خوارزمی طرحی داشته و در رابطه با گزارش علمی طرح هم تجربه داره...

black_wear
دوشنبه 07 فروردین 1391, 09:20 صبح
سلام
دوست عزیز خیلی عالیه که اطلاعاتتون پایه ای باشه اما اگه علاقمند به سرعت بالا هستید اصلا #C رو پیشنهاد نمیکنم.
توابع آماده OpenCV خیلی سریعتر از اشاه گرها در #C هست.

EhsanHejazi
یک شنبه 13 فروردین 1391, 16:28 عصر
دوست عزیزم ،مطمئنن گروهی که روی opencv کار می کردن هم گروه خیلی بزرگتری بودن و هم اطلاعات خیلی وسیع تری داشتن ولی نکته این جاست که مثلا شما می خواید که از مقدار رنگ قرمز یک پیکسل کم کنید ولی دستور آماده ی opencv هم مقدار رنگ قرمز،هم آبی و هم سبز رو با یک تابع از شما دریافت می کنه و سرعت کار می یاد پایین و شما یک کاره اضافه انجام دادید و نمونه های دیگه(البته شاید مثالی که زدم توی opencv راه حلی داشته باشه ولی توی موارد دیگه این اتفاق امکان داره که بیفته)...به نظر من نوشتن دستورات از پایه و درک اون ها و خصوصی سازی به نحوی که نیاز داریم خیلی بهتره...مثلا لبه یابی که قصد داریم انجام بدیم رو می تونیم به طریقی که می خواهیم خصوصی سازی کنیم(به جای استفاده از الگوریتم آماده ای مثل روش canny)...

مصطفی ساتکی
سه شنبه 15 فروردین 1391, 18:35 عصر
دوست عزیزم ،مطمئنن گروهی که روی opencv کار می کردن هم گروه خیلی بزرگتری بودن و هم اطلاعات خیلی وسیع تری داشتن ولی نکته این جاست که مثلا شما می خواید که از مقدار رنگ قرمز یک پیکسل کم کنید ولی دستور آماده ی opencv هم مقدار رنگ قرمز،هم آبی و هم سبز رو با یک تابع از شما دریافت می کنه و سرعت کار می یاد پایین و شما یک کاره اضافه انجام دادید و نمونه های دیگه(البته شاید مثالی که زدم توی opencv راه حلی داشته باشه ولی توی موارد دیگه این اتفاق امکان داره که بیفته)...به نظر من نوشتن دستورات از پایه و درک اون ها و خصوصی سازی به نحوی که نیاز داریم خیلی بهتره...مثلا لبه یابی که قصد داریم انجام بدیم رو می تونیم به طریقی که می خواهیم خصوصی سازی کنیم(به جای استفاده از الگوریتم آماده ای مثل روش canny)...
هیچ هم اینطوری نیست کتابخانه openCV توسط شرکت intel نوشته شده و بالاترین performance رو بین کتابخانه های موجود داره و در ابتدا در ansi C پیاده سازی شده .من چندین سال که به صورت حرفه ای dip کار می کنم و تو کامپایلرهای مختلف کتابخانه نوشتم در نهایت به ansi Cو C++ همگرا شدم .خود ansi C بهترین performance رو در بین زبان های دیگه برای کار با اشاره گر ها داره.
من بیشتر توابع موجود در opencv رو سابق در کتابخانه خودم داشتم intel در توابع پایه ای بسیار عالی کار کرده و از fpu و gpu هم به خوبی استفاده کرده شما اول سورس های opencv رو ملاحضه کنید و بعداً اظهار نظر کنید.
برای کار با تصویر می تونید از iterator ها یا از عملگر at و یا به صورت اشاره گر بهمراه widthStep استفاده نماید که در مورد آخر کد پیجیده میشه و بهترین performance رو به شما میده. در ضمن اکثر توابعی که ذاتاً سریال نباشند رو هم opencv به صورت gpu base داره.

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