نمایش نتایج 1 تا 30 از 30

نام تاپیک: تکنیک های مقایسه ی دو تصویر

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    تکنیک های مقایسه ی دو تصویر

    مقایسه ی دو عکس

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

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

    راه اول :
    بعد از چک نمودن سایز دو تصویر ، ما از طریق تابع 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
    فایل های ضمیمه فایل های ضمیمه
    I've just started tweeting!
    @Alireza_Maddah

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •