PDA

View Full Version : مقایسه دو تصویر



میلاد قاضی پور
دوشنبه 19 مهر 1389, 21:58 عصر
سلام . میخوایم دو تصویر رو با همدیگر مقایسه کنیم . ممکن هست اندازه ها فرق داشته باشن اما تصاویر یکی هستند . میشه برای جلوگیری از خطا فرض کنیم که تصاویر "باید" کوچکتر و بزرگتر از حد خاصی نباشن . خودآزمایی:
1- آیا مقایسه دو تصویر نا هم اندازه ممکن هست ؟
2- اگر ممکنه ، آیا اگر طیف رنگیشون متفاوت باشه هم ممکنه؟
3-در کل اینکار به چه صورت انجام میشه یعنی پیکسل به پیکسل یا ناحیه به ناحیه عکسها با هم مقایسه میشن یا با ترکیب رنگشون ؟

eshpilen
سه شنبه 20 مهر 1389, 08:26 صبح
شاید اگر هر دو تصویر رو ابتدا به یک فرمت مشترک با کیفیت پایین تبدیل کنیم، کار مقایسه راحتتر بشه.
برای تطبیق بیتی حداکثری، شاید بشه تصاویر رو نمایش داد و بعد از ناحیهء نمایش اونها اسکرین شات گرفت و بعد اسکرین شاتها رو مقایسه کرد. این کارها رو دستی نمیگم انجام بدیم، بصورت خودکار برنامه میتونه انجام بده.
البته اینا ایده های بالبداهه بود که همین الان به ذهنم رسید. احتمالا راههای استاندارد و دقیقتری وجود داشته باشن و شاید اصلا این روشها جواب ندن.
بهرحال بدست آوردن یک تطبیق بیت به بیت فکر نمیکنم در بیشتر موارد ممکن باشه و باید یک الگوریتم محاسبهء شباهت تقریبی داشته باشیم.
در هر زمینه ای آدم منابع رو مطالعه کنه میبینه که چقدر ایده ها و روشهای موفق وجود داره و خیلی از روشهایی که من و شما به ذهنمون میرسه قبلا تست شدن و بعضیا هم از اساس اشتباه بودن یا بهرحال روشهای خیلی اصولی تر و موفقتری وجود دارن. مسلما در اینطور زمینه ها قبلا کار و تحقیقات زیادی انجام شده.

eshpilen
سه شنبه 20 مهر 1389, 09:09 صبح
فکر کنم بد نباشه کاهش رنگ تصویر رو هم بررسی کنی.
یعنی مثلا دوتا تصویر رو به ۲۵۶ رنگ تبدیل کنی و بعد مقایسه کنی. به اینصورت اختلافات جزیی رنگها از بین میرن. البته این بازم چیزی تضمین نمیکنه. همهء این راهها تقریبی و برای ساده کردن مقایسهء نهایی هستن.
بهرحال من فکر میکنم کتابخانه های آماده برای انجام اینطور کارها وجود داشته باشن که اصولی ترین و بهینه ترین الگوریتم های لازم رو خودشون پیاده سازی کردن. چرا یکی از این کتابخانه ها رو پیدا و استفاده نمیکنی؟

Alireza_Salehi
سه شنبه 20 مهر 1389, 12:11 عصر
در پردازش تصویر اگر می خواهید دقت بالایی داشته باشید باید نسبت به محتوای عکس (کاربرد آن) روش خود را بهینه سازی کنید.

1. در صورتی که دو تصویر با اندازه متفاوت ، چرخیده، کج شده، قوس دار یا... را مقایسه کنید باید ابتدا با Registration آنها را به مقیاس و شکل یکسانی نگاشت کنید. بعد از آن اقدام به مقایسه کنید.

2. اگر طیف رنگ متفاوت باشد هم مشکلی نیست : MultiSpectral Image Registration

3 . بستگی زیادی به کاربرد و طیف های موجود در عکس داره، بعضی وقتها یک تفریق ساده جواب میده و بعضی وقت ها تحلیل های فرکانسی هم به سختی جواب میده.

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

میلاد قاضی پور
سه شنبه 20 مهر 1389, 17:07 عصر
به نظر شما اگر از طریق دات نت بخوام این عمل مقایسه رو برای صدها عکس به طور پیاپی انجام بدم اعلام نتیجه نهایی مقایسه چقدر طول میکشه ؟ (پردازش مجموعا برای صد عکس بطور میانگین چقدر طول میکشه )
میدونم این بستگی به نوع الگوریتم مقایسه و اینکه چه عملیاتی باید انجام بشه داره اما در کل میخوام بدونم تو چه حدودایی هست .

Alireza_Salehi
سه شنبه 20 مهر 1389, 20:03 عصر
سریع ترین نتیجه رو با CPP خواهید داشت، هر چند با CSharp هم به شرط این که عملیات روی تصویر را در حالت unsafe انجام دهید سرعت قابل قبولی دارد.

DLL هایی که از Matlab تولید می شوند و در سی شارپ به کار می روند معمولا کمی باعث کند شدن کار می شوند.

از کتابخانه هایی مثل opencv که برای CPP هست می توانید استفاده کنید.
http://opencv.willowgarage.com/documentation/cpp/index.html

برای سی شارپ هم این یک نمونه :
http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab.aspx


100 تا عکس همچین رقمی نیست! در روبات فوتبالیست سایز کوچک بین 25 ت ا60 فریم در ثانیه باید پردازش شود....

میلاد قاضی پور
سه شنبه 20 مهر 1389, 21:29 عصر
بسیار مفید بود اما میخوام بدونم چقدر تخمین زده میشه که موردی که گفتم انجام بشه میخوام ببینم ایده ای که تو سرمه قابل پیاده سازی هست یا خیر

xxxxx_xxxxx
سه شنبه 20 مهر 1389, 22:41 عصر
سلام،

1- آیا مقایسه دو تصویر نا هم اندازه ممکن هست ؟البته که ممکن هست.


2- اگر ممکنه ، آیا اگر طیف رنگیشون متفاوت باشه هم ممکنه؟با سیاه و سفید کردن تصاویر، طیف رنگی هر دو رو یکسان می کنیم تا راحت تر بشه.


3-در کل اینکار به چه صورت انجام میشه یعنی پیکسل به پیکسل یا ناحیه به ناحیه عکسها با هم مقایسه میشن یا با ترکیب رنگشون ؟ مراحل مقایسه به نظر من:
1- هر دو تصویر رو سیاه و سفید کنید. (میانگین RGB رو بگیرید و روی هر سه پارامتر R و G و B اعمال کنید)
2- ضریب بزرگنمایی تصویر بزرگتر رو محاسبه کنید (طول و عرض تصویر)
3- هر دو تصویر رو با توجه به اون ضریب، بلاک بندی کنید.
4- میانگین مقدار پیکسل های هر بلاک رو محاسبه کنید و با بلاک متناظر خودش در تصویر دوم مقایسه کنید. (البته باز هم با اعمال اون ضریب)

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

اگر ضریب خطای این روش زیاد هست، همین کارو بدون مرحله اول انجام بدید بهتر میشه (اما زمان مقایسه زیاد میشه)

موفق باشید/

میلاد قاضی پور
چهارشنبه 21 مهر 1389, 01:20 صبح
بسیار مفید بود اما میخوام بدونم چقدر تخمین زده میشه که موردی که گفتم انجام بشه میخوام ببینم ایده ای که تو سرمه قابل پیاده سازی هست یا خیر
پاسخ به این سوأل خیلی برام مهم هست .

مصطفی ساتکی
چهارشنبه 21 مهر 1389, 08:14 صبح
سلام . میخوایم دو تصویر رو با همدیگر مقایسه کنیم . ممکن هست اندازه ها فرق داشته باشن اما تصاویر یکی هستند . میشه برای جلوگیری از خطا فرض کنیم که تصاویر "باید" کوچکتر و بزرگتر از حد خاصی نباشن .
اگر هدفتون جستجویه Object تو تصاویر دیگه است که قضیش با اون چیزی که دوستان گفتند کاملاً متفاوته.
اگر بخاید تصویری که تکه از تصویر دیگه است و میخاید اونو ما بین هزاران تصویر سرچ کنید می تونید از انواع convolution ها استفاده کنید که بهترینش FFT .
در مورد اول اگر لازم باشه توضیح بیشتری داده بشه بایستی مشخص باشه که هدف چیه.
در ضمن در همه موارد مقایسه difference گرفتن از دو تصویر خام به شما peek خوبی نمیده برای این نوع difference بهتره از تصویر لبه گیری کنید و بعد مقایسه رو صورت بدید مخصوصاً اگر canny باشه بهتر که در ابتدا یه فیلتر پایین گذر هم اعمال می کنه و بسیاری از نویزها رو کاهش میده در تصویر لبه گیری فقط لبه مقایسه میشن و به جزئیات همچون رنگ و نوسانات روشنایی نادیده گرفته میشه.

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

مصطفی ساتکی
پنج شنبه 22 مهر 1389, 07:51 صبح
همون convolution با fft کارتونو را میندازه.

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

mostafa_shaeri_tj
پنج شنبه 22 مهر 1389, 12:27 عصر
من یه پروژه پردازش تصویر رو با دات نت انجام دادم. پروژه بزرگی هم بود . البته توش از dll هایی استفاده میکردم که تو زبان matlab نوشته شده بود. جواب خوبی هم گرفتم.

مصطفی ساتکی
شنبه 24 مهر 1389, 07:57 صبح
جواب خوبی هم گرفتم
تا جائیکه من اطلاع دارم تو مقایسه performance بین کتابخانه های معروف matlab حرفی برای گفتن نداره .
matlab برای پیاده سازی با performance بالا طراحی نشده فقط برای کاهش هزینه بخش تحقیقات هر شرکتی یا کلاً کارهای تحقیقاتی که جواب قطعی ندارن رو با اون پیاده سازی می کنن.