ورود

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



علیرضا مداح
شنبه 18 تیر 1384, 17:29 عصر
مقایسه ی دو عکس

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

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

راه اول :
بعد از چک نمودن سایز دو تصویر ، ما از طریق تابع GetPixel مربوط به کلاسBitmap هر یک از پیکسلهای تصویر اول را با پیکسل نظیر در تصویر دوم مقایسه میکنیم و در صورتی که حتی یک پیکسل از دو تصویر با یکدیگر برابر نبودند ، دو تصویر نیز با یکدیگر یکی نخواهند بود ، حال به کد زیر توجه کنید :



Function CompareImagesByPixel(ByVal FirstBMP As Bitmap, ByVal SecondBMP As Bitmap) As Boolean

Dim AreSizesEqual, AreIdentical As Boolean
AreIdentical = True
'ابتدا سایز دو تصویر را با یکدیگر مقایسه میکنیم
AreSizesEqual = (FirstBMP.Size.ToString = SecondBMP.Size.ToString)
If AreSizesEqual = False Then
Return False
Exit Function
End If

'سپس از طریق یک حلقه ، تک تک پیکسلهای دو تصویر را با یکدیگر مقایسه مینماییم
For X As Integer = 0 To FirstBMP.Width - 1
For Y As Integer = 0 To FirstBMP.Height - 1
If Not (FirstBMP.GetPixel(X, Y).ToString = SecondBMP.GetPixel(X, Y).ToString) Then
AreIdentical = False
Exit For
End If
Next Y
Next

Return AreIdentical
End Function




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

راه دوم :
در این روش میبایست از مقایسه ی مقدار Hash شده ی دو تصویر با یکدیگر استفاده نماییم . الگوریتمهای Hash متنوعی در فضای نام System.Security.Cryptography فراهم آورده شده اند . در اینجا ما از کلاس SHA256Managed در جهت پیاده سازی الگوریتم SHA1 استفاده خواهیم نمود . متد ComputeHash مربوط به این کلاس آرایه ای از بایت را به عنوان پارامتر ورودی دریافت و مقدار Hash شده ی 256 بیتی از داده ی مورد نظر را تولید مینماید . بدین ترتیب با Hash نمودن دو تصویر مورد نظر و مقایسه ی آنها با یکدیگر میتوانیم به یکی بودن دو عکس با یکدیگر پی ببریم .



Function CompareImagesByHashing(ByVal FirstBMP As Bitmap, ByVal SecondBMP As Bitmap) As Boolean
'ابتدا سایز دو تصویر را با یکدیگر مقایسه میکنیم
Dim AreSizesEqual, AreIdentical As Boolean
AreIdentical = True
AreSizesEqual = (FirstBMP.Size.ToString = SecondBMP.Size.ToString)
If AreSizesEqual = False Then
Return False
Exit Function
End If
'نمونه ی از کلاس
'ImageConverter
'در جهت تبدیل دو تصویر به آرایه ای از بایتها ایجاد مینماییم
Dim ImageCon As New ImageConverter
Dim arrImage1(1), arrImage2(1) As Byte

'دو تصویر را به آرایه ای از بایتها تبدیل مینماییم
arrImage1 = ImageCon.ConvertTo(FirstBMP, arrImage1.GetType)
arrImage2 = ImageCon.ConvertTo(SecondBMP, arrImage2.GetType)

'نمونه ای از کلاس
'SHA256Managed
'ایجاد کرده و هر یک از دو تصویر را توسط متد
'ComputeHash
'که مقدار بازگشتی آن آرایه ای از بایتها میباشد ، هش مینماییم .
Dim SHA As New System.Security.Cryptography.SHA256Managed
Dim Image1_Hashed(), Image2_Hashed() As Byte
Image1_Hashed = SHA.ComputeHash(arrImage1)
Image2_Hashed = SHA.ComputeHash(arrImage2)

'سپس هر یک از اعضای دو آرایه را با یکدیگر مقایسه مینماییم
For iHash As Integer = 0 To Image1_Hashed.Length - 1
If Not (Image1_Hashed(iHash) = Image2_Hashed(iHash)) Then
AreIdentical = False
Exit For
End If
Next

Return AreIdentical
End Function

mr_esmaily
شنبه 08 مرداد 1384, 12:49 عصر
سلام
باتشکر
حال اگر بخواهم یک بخش از تصویر شماره 1 رو در تصویر شماره 2 جستجو کنیم و تفاوت مختصات اون قطعه تصویر رو در دو عکس بدست بیاریم از چه راهی امکان پذیره؟

Fagat_tanhaie
پنج شنبه 24 شهریور 1384, 12:41 عصر
سلام
مشکلاتی در هر دو روش وجود داره که گفتنش ضرری نداره.
در روش دوم امکان بدست اوردن درصد تغییرات و مشخص کردن محل تغییرات وجود نداره.
در روش اول اگر یک تصویر ار محیط باز باشه و بخواهیم تغییرات محیط رو بدست بیاریم(مثلا در سیستم های حفاظتی) در صورت تغییر نور محیط برنامه وجود تغییرات را در تمام محیط گزارش می دهد که در واقع
چیزی وارد محیط نشده است.

مرسی

coder
سه شنبه 16 اسفند 1384, 07:50 صبح
اگر درست متوجه شده باشم ،در هر دو روش اگر حتی یک پیکسل تفاوت باشد جواب منفی است. حال آنکه از نظر چشم انسان یک مقدار تفاوت قابل تحمل است. مثلا اگر یک فایل رو بدون تغییر تعداد پیکسلها با درجات مختلف فشرده سازی کنیم یا با اعمال فیلترها تغییرات ملایم رو اون بدیم باز هم از نظر انسان مشابه هم خواهند بود.
بنابراین بهتر است در روش اول متغییری رو برای ذخیره مجموع درصد تفاوت تک تک پیکسلها در نظر گرفته و پس از پردازش، اگر مقدار آن از یک حد آستانه کمتر شد میتوان گفت دو تصویر شبیه هم هستند.
و دیگر اینکه اگر بخواهیم دو تصویر را به روشی مشابه مغز انسان مقایسه کنیم ( مثل سیستمهای تشخیص هویت ) باید از روشهای پیچیده هوش مصنوعی استفاده کرد. و برای این کار نرم افزارهای مخصوصی وجود داره.

alirezador
سه شنبه 16 اسفند 1384, 08:09 صبح
در کل مقایسه دو تصویر در سیستم های انگشت نگاری و چهره شناسی به کار میره و این روشها اصلا برای چنین کارهایی مناسب نیست فرض کنید که اثر انگشت یک نفر بر روی کاغذ اسکن شده کمی به طرف چپ رفته باشد در این صورت این کار منتفی هستش اون طور که یکی از اساتید دانگاه تبریز میگفت پایگاه داده اراکل خودش میتونه مقایشه دقیق اثر انگشت را انجام بده و در ضمن در کار شما اگر جنس کاغذ اسکن شده و نوع دوربین هم تاثیر میزاره و در کل این روش در 90% موارد جوابه false میده

sjj
جمعه 08 اردیبهشت 1385, 01:05 صبح
به نظر جالب ولی خیلی ابتدایی می یاد .نکاتی که باید مد نظر داشت اینه که برنامه باید از Rotate ، Size و همچنین تفاوت رنگ ها در دو عکس مورد مقایسه چشم پوشی کنه.اگه ما بتونیم این مشکلات رو حل کنیم دیگه مشکلی هم واسه بحث شیرین OCR فارسی نداریم.
ولی یادمون باشه که همیشه باید از یه جایی شروع کرد.

amirsadeghi
جمعه 19 آبان 1385, 20:07 عصر
حالا اگه هر دو عکس یکی بودن و فقط اندازشون فرق می کرد؟

amirsadeghi
پنج شنبه 14 دی 1385, 15:12 عصر
چرا بحث به این جالبی و مفیدی رو رها کردین بیاین ادامه اش بدیم
خیلی به درد می خوره ها از ما گفتن بود

sjj
جمعه 15 دی 1385, 13:22 عصر
من هم موافقم ولی با این الگوریتم فکر نکنم به جایی برسیم.

amirsadeghi
جمعه 15 دی 1385, 14:25 عصر
خوب پس بهتره فکرامونو رو هم بزاریم و یه کاری کنیم
من که پایه ام
شما رو نمیدونم

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

sjj
شنبه 16 دی 1385, 17:55 عصر
علاوه بر اینا یه مشکلات دیگه ای هم هست.به نظر من این الگوریتم زیاد قوی نیست.با یه مثال بیشتر توضیح میدم.شما فرض کنید که می خواید دو تا نمونه امضا رو با هم مقایسه کنید.خب دو تا امضا که دقیقا یکی نمی شن.پس مقایسه پیکسل به پیکسل رو بهتره از فکرمون بیرون کنیم.تازه یه سری مشکلات ریز دیگه هم هست مثل رنگ دو تصویر و ... که فکر نکنم زیاد مشکل ساز باشن.

TAMIZI3
شنبه 16 دی 1385, 21:29 عصر
فکر نمی کنم اصلا بشه امضا رو با کامپیوتر مطابقت داد ...میشه ؟؟؟
در مورد تصویر هم نباید اندازه ها رو یکسان کرد شاید دو تصویر مثل هم باشند با این تفاوت که دومی از هر سمت مثلا یک سانت گوشه سفید داشته باشد
باید تعریف کنیم اگه مثلا 90 درصد پیکسال ها مثل هم باشد آنوقت نتیجه را قابل قبول اعلام کند
فکر کنم این بهتر باشه

amirsadeghi
سه شنبه 19 دی 1385, 00:26 صبح
حالا بهتر نیست اضافات رو اول پاک کنیم بعد اندازه هاشون رو یکی کنیم؟

amirsadeghi
جمعه 22 دی 1385, 23:42 عصر
باز که همتون گذاشتین رفتین که بابا بیاین ادامه بدیم خیلی مفیده و کلی کاربرد داره

mohsengrisly
شنبه 23 دی 1385, 01:14 صبح
با سلام خدمت همه دوستان و اساتید خودم
حدود یک سال پیش هم چنین طرحی ارائه شد و البته من تا جایی که می تونستم و در توانم بود
هر جور اطلاعاتی رو در اختیار دوستان قرار دادم .حتی چند الگوریتم رو هم ارائه کردم که مورد توجه همه دوستان قرار گرفت .اما پس از مدتی همه رفتن دنبال زندگی و گرفتاری ها
در کل از یاد همه فراموش شد .جهت اطلاع به مبحث(مطالب مربوط به اثر انگشت مراجعه کنید)
با این حال اگر بحث ادامه پیدا کنه قول قول میدم بازم تا جایی که بتونم کمک کنم

amirsadeghi
شنبه 23 دی 1385, 16:07 عصر
سلام
دستتون واقعا درد نکنه
لینک این تاپیک رو میزارید؟
خیلی خیلی ممنون.

Amir Oveisi
یک شنبه 24 دی 1385, 00:06 صبح
امیدوارم اینم بتونه یه کمکی بکنه
منم خیلی پایم که ادامه بدیم تا به نتایج خوبی برسیم

amirsadeghi
دوشنبه 25 دی 1385, 01:06 صبح
خوب دسستتون درد نکنه فایل خوبی بود
خوب باید از کجا شروع کنیم.
من پایه ام
فکر کنم پا که بگیره بچه ها میان
به زودی چند تا مرجع میزارم
فعلا بای

Amir Oveisi
پنج شنبه 12 بهمن 1385, 23:27 عصر
این برنامه مقایسه اثر انگشت که اینجا تبلیغ میشه رو دیدید؟؟؟ چجوری هاس؟؟

Ali_Mor
یک شنبه 22 بهمن 1385, 00:38 صبح
در مورد اثر انگشن اطلاعاتی ندارم. ولی می دونم با کمک شبکه های عصبی می توان خیلی کار انجام داد. مثلا شباهت تصاویر را بررسی کرد.
مثلا من تونستم با کمک اون یک OCR که شماره پلاک خودرو را پیدا میکرد بنویسم که لازم نبود تصویر پلاک از زاویه یا فاصله خاصی گرفته بشه.
نمونه های جالبی از شبکه عصبی را می تونید تو help نرم افزار MATLAB و یا اینترنت پیدا کنید

amirsadeghi
چهارشنبه 12 اردیبهشت 1386, 20:40 عصر
اثر انگشت و امضا رو براحتی میشه با استفاده از شبکه های عصبی مقایسه کرد

kourosh_ag
جمعه 18 خرداد 1386, 22:44 عصر
سلام
من هم در مورد مقایسه اثر انگشت ها تحقیقاتی کردم و تا اون جا که فهمیدم مقایسه دو اثر انگشت نه بر اساس تمامی اثر انگشت بلکه بر اساس 10 نقطه مشخص صورت میگیره.
البته تصویری هم در این رابطه دارم که اگر پیداش کردم حتما Up میکنم

amirsadeghi
سه شنبه 30 مرداد 1386, 16:04 عصر
آقای kourosh_ag عکسها را پیدا نکردید؟

soroush_farda
یک شنبه 04 شهریور 1386, 11:57 صبح
سلام
اگه کسی هنوز به این تایپک سر می زنه ، من یه سوال دارم !!!!!!!!!!

rezaei manesh
چهارشنبه 14 شهریور 1386, 17:40 عصر
سلام
بحث بسیار بسیار مفید و همین طور مشکلی رو پیش کشیدید و رها کردید
اگه بشه همچین برنامه ای بنویسید من اونو ازتون حاضرم که بخرم هر کمکی هم برای پیشرفتش می کنم و..
من بیشتر مد نظرم مقایسه عکس های هست که دوربین هنگام کارت زدن پرسنل از روبروی ساعت می گیره هست حتی اگه 70 درصد هم جواب بده خوبه و....

sasan_vm
شنبه 10 آذر 1386, 11:20 صبح
سلام

مقایسه تصاویر در مباحث Biometrics , Robotics کاربرد فراوان دارد ولی بحث مقایسه پیکسل به پیکسل و سایز همسان در این مورد منتفی است.
در این مورد الگوریتم های زیادی موجود است که اساس کار آنها یکی است، در مورد مقایسه اثر انگشت ها روش کار بدین صورت است:

1- تبدیل تصویر به فرمت 8bit GrayScale
2- استخراج جرئیات از این تصویر این جزئیات شامل نقاط (Minutiae, Delta, Core, Double Core) می باشد و یک سری اطلاعات دیگر مانند (Pattern Class, Position, Curvature) این اطلاعات در یک فرمت خاص یا فرمتهای استاندارد (NIST ITL-1-2000، INCITS 378-2004) ذخیره می شوند (Template) و برای مقایسه اثر انگشتها از این template استفاده می شود. در زمان مقایسه هیچ ارجاعی به تصویر اولیه اثر انگشت نداریم همه اطلاعات مورد نیاز درون template موجود است.
3- اساس کار مقایسه اثر انگشتها مقایسه نقاط Minutiae است این نقاط شامل شروع خط، انتهای خط، دو شاخه شدن خط و ... می باشند. تصویر ضمیمه مقایسه دو اثر انگشت را با جزئیات کامل نشان میدهد، البته بقیه جزئیات هم در نتیجه نهائی موثر است. (ظاهرا این 2 تصویر شباهتی ندارند ولی شامل 15 Minutae مشابه با شباهت 308 هستند.)

امسال ما یک پروژه شناسائی اثر انگشت را در مقیاس بزرگ انجام دادیم که با موفقیت تست و راه اندازی شد. Demo برنامه(شامل document, film, pictures) را از این link می توانید دریافت کنید:
http://rapidshare.com/files/46306728/afis.zip.html



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


شناسائی چهره نسبت به اثر انگشت کار ساده تر ولی با دقت پائین تر است ، در این زمینه برنامه ای را تازه به اتمام رسانده ایم مشغول مراحل تست ان هستیم بزودی اماده ارائه می شود (حد اکثر 2 ماه) ، در بحث مورد نظر شما حدث ما این است که بالای 90% جواب بگیریم.

برنامه شناسائی اثر انگشت هم اکنون آماده ارائه است.
موفق باشید.

amirsadeghi
چهارشنبه 28 آذر 1386, 11:24 صبح
ممنون
ان شا الله بررسی شود و مورد استفاده قرار گیرد

vb_bmw
سه شنبه 04 دی 1386, 15:04 عصر
سلام!

این مبحث خیلی گستردست!

انقدر که توی دکتری ما یه شاخه به نام Image Preprocessing داریم!

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

amirsadeghi
پنج شنبه 06 دی 1386, 17:16 عصر
بسم الله
شروع کنید