مشاهده دست آورد نظرسنجی: چگونگی پردازش تصویر در سی پارپ

رای دهنده
3. شما نمی توانید در این رای گیری رای بدهید
  • عالی

    1 33.33%
  • خوب

    1 33.33%
  • متوسط

    0 0%
  • ضعیف

    1 33.33%
نمایش نتایج 1 تا 20 از 20

نام تاپیک: چگونگی مقایسه پیکسل به پیکسل تصویر در سی شارپ

  1. #1

    چگونگی مقایسه پیکسل به پیکسل تصویر در سی شارپ

    چگونه می توان تصویری را با تصویر دیگر در #C مقایسه نمود که تصویر اولی با تصویر دوم یکسان است . و اگر اختلاف داشت چند درصد با هم متفاوتند (بحث پردازش تصویر درC#‎.net)

  2. #2
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    کسی بلد بود بگه که برای من هم سواله!
    حدس میزنم که باید یه متدی مثل GetPixel باشه. خواستم این متد رو به PictureBox ربط بدم، که بلد نبودم.

  3. #3
    کاربر جدید
    تاریخ عضویت
    آذر 1385
    محل زندگی
    تهران
    پست
    3
    اگر بخواهیم دو عکس را با هم مقایسه کنیم کافی است آن دو را در دو متغیر بایت بریزیم و بایت به بایت به بررسی آنها بپردازیم مانند :
    strImgName = openFileDialog.FileName
    ByteOfFile = System.IO.
    File.ReadAllBytes(strImgName

    که در آن byteoffile یک متغییر بایتی است :
    byte[] ByteOfFile
    حال شما 2 تا از این متغییر تعریف کنید و ...

  4. #4
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491

    Post

    مقایسه بایت به بایت مطلقا یکی از مقایسه های اساسی و خوب به حساب میآد، اگر بخوایم بدونیم که دو تا عکس چند درصد با هم اختلاف دارن میشه از مقایسه بایت به بایت استفاده کرد ولی کمی مشکله که از بایتها سر در بیآریم و نیاز به کار Professional داره و ساده تر هست که مقایسه پیکسل به پیکسل داشته باشیم برای وقتی که میخوایم بدونیم دو تا عکس چند درصد با هم اختلاف دارن. میشه از کلاس Bitmap برای اینکار استفاده کرد:

     
    Bitmap b1 = newBitmap("FileName1");
    Bitmap b2 = newBitmap("FileName2");
    if(b1.GetPixel(0, 0) == b2.GetPixel(0, 0))
    MessageBox.Show("The First Pixel is Similar");



    که FileName1 آدرس عکس اول و FileName2 آدرس عکس دوم است و در صورتی که پیکسل 0و0 از عکس اول با پیکسل 0و0 از عکس دوم برابر باشه، متن The First Pixel is Similar به نمایش در میآد.

    البته میتونی از کدهائی هم استفاده کنی و مقدار رنگ قرمز یا سبز یا آبیشون رو در پیکسل 0و0 مورد مقایسه قرار بدی مثلا برای اینکه بدونی در پیکسل 0و0، رنگ قرمز عکس اول کمتر هست یا نه، بصورت زیر مینویسیم:

     
    if(b1.GetPixel(0, 0).R < b2.GetPixel(0, 0).R)
    MessageBox.Show("The Red Color is Smaller");



    در فوق در صورتی که مقدار رنگ قرمز از پیکسل 0و0 عکس اول کمتر از مقدار رنگ قرمز از پیکسل 0و0 عکس دوم باشه، متن The Red Color is Smaller به نمایش در میآد.
    البته برای رنگهای آبی از B و سبز از G استفاده میکنیم.


    در آخر اگر بخوای کل پیکسلهای عکس رو تک تک با هم مقایسه کنی باید از یک حلقه for استفاده کنی و پیکسلهای متناظر رو با هم مقایسه کنی (چه از لحاظ برابر بودن یا چه از لحاظ مقدار رنگ قرمز یا آبی یا ...) تا مقایسه فایلها به اتمام برسه (باید دو متغیر i و j برای حلقه for استفاده بشه تا پیکسلهای iوj از هر دو عکس، با هم مقایسه بشن) سپس با توجه به مقایسه*ها میشه فهمید که دو عکس چند درصد با هم اختلاف دارند.


    البته برای این مقایسه از کلاس Bitmap استفاده شد، و نمیدونستم میشه از کنترل PictureBox برای این منظور استفاده کرد یا نه...

  5. #5
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709
    با این توضیحاتی که شما گفتید یک سوال پیش میاد آنهم اینکه برای مقایسه یک فایل با حجم مثلا 200 کیلو بایت چقدر زمان نیاز است ؟
    منظورم مقایسه همه رنگها است .

  6. #6
    کاربر دائمی آواتار Behrooz_CS
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    سن
    41
    پست
    168
    مقایسات باید پیکسل به پیکسل انجام بشه ، راه دیگه ای هم نداره
    می توان دو عکس هم سایز را پیکسل به پیکسل مقایسه کرد و گفت که چقدر با هم تفاوت دارن ( به در صد ) کار راحتیه :D

  7. #7
    مقایسه بایت به بایت مطلقا یکی از مقایسه های اساسی و خوب به حساب میآد
    مقایسات باید پیکسل به پیکسل انجام بشه ، راه دیگه ای هم نداره
    میشه منبعتونم ذکر کنید و بگید از روی چه کتابی، مقاله ای یا ... اینو گفتین؟
    ظاهرا کلا بحث پردازش تصویر رو شما خلاصه کردین در یه جمله!

  8. #8
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491

    Post

    نقل قول نوشته شده توسط Hossein Bazyan مشاهده تاپیک
    با این توضیحاتی که شما گفتید یک سوال پیش میاد آنهم اینکه برای مقایسه یک فایل با حجم مثلا 200 کیلو بایت چقدر زمان نیاز است ؟
    منظورم مقایسه همه رنگها است .
    فکر کنم زمان زیادی صرف بشه :)

    اگه بخوایم سرعت رو بالاتر ببریم، میشه بجای استفاده از خاصیتهای R (مقدار رنگ قرمز) یا G (سبز) یا B (آبی) از یک متد برای مقایسه استفاده کرد و اون متد
    ToArgb()
    هست، این متد مقدار رنگ رو بصورت یک عدد از نوع int برمیگردونه، (منتهی این متد، مقدار رنگ را بصورت کلی مشخص میکند، یعنی به راحتی نمیشه فهمید که رنگ قرمزش چقدره یا آبیش چقدره، اگر هم بشه من بلد نیستم. متد
    ToArgb()
    فقط یک کد میده که ترکیبی از رنگهای قرمز و آبی و ... است) و کافیه که، این اعداد رو برای هر پیکسل از هر دو عکس، با هم مقایسه کنیم و هرچه فاصله این اعداد از هم بیشتر باشه، مسلما تفاوت در مقدار رنگ اون پیکسل هم بیشتره. یعنی با کمک این خاصیت، بجای مورد شرط قرار گرفتن سه خاصیت R و G و B از یک متد
    ToArgb()
    استفاده میکنیم. سرعت بیشتر میشه. به کمک این متد 6 ثانیه طول میکشه که دو فایل 200 کیلوبایتی رو مقایسه کنی.

    البته، مطمئنا روش سریعتری هم وجود خواهد داشت. مثلا روشی که از طریق Pointer به پیکسلهای یک Bitmap که در آرایه ذخیره شده باشه، دسترسی داشته باشیم که مطمئنا سریعتر هست. در آدرس زیر یک کلاس نوشته شده که به کمک اون کلاس میتونید از طریق Pointer به آرایه‌ای از پیکسلهای یک Bitmap دسترسی داشته باشید و خودش یک GetPixel جدید توش معرفی کرده که مقدار پیکسل با سرعت بیشتری با همین تکنیک، بدست خواهد آمد، ولی خودم هنوز اون رو امتحان نکردم:

    http://www.dreamincode.net/forums/in...6&#entry144886

  9. #9
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    نقل قول نوشته شده توسط someCoder مشاهده تاپیک
    میشه منبعتونم ذکر کنید و بگید از روی چه کتابی، مقاله ای یا ... اینو گفتین؟
    ظاهرا کلا بحث پردازش تصویر رو شما خلاصه کردین در یه جمله!
    مقایسه بایت به بایت مطلقا یکی از مقایسه های اساسی و خوب به حساب میآد
    بله، شما درست میگوئید، من در استفاده از این جمله، بیش از حد عجله کردم.

    مشخصات هر پیکسل در هر عکس، در چندین بایت میتواند ذخیره شود (در حالی که من گفته بودم بایت به بایت و بهتر بود میگفتم بایتها با بایتها آنهم نه بایتهائی که حتما متناظر باشند) و از اینکه گفتم اساسی هست، بخاطر این بود که اساس کار خواندن فایلها، این است که فایل را چه بصورت باینری چه متنی (چه بایت بایت یا خط خط یا بیت بیت!!!) خوانده و سپس مقایسه ها را از بین اطلاعات خوانده شده، انجام دهیم.

    ولی متاسفانه این جمله ای که بکار بردم (بخصوص کلمه مطلقا)، اصلا جالب نبود ...
    بلکه بهتر بود تا این حد عجله نمیکردم، منظور خودم رو بیشتر توضیح میدادم و در یک خط خلاصه نمیکردم.

  10. #10
    کاربر دائمی آواتار ARA
    تاریخ عضویت
    آبان 1383
    محل زندگی
    Bad Sector
    پست
    448
    اما پردازش تصویر چیزی خیلی فراتر از این چیز هاست

  11. #11
    یکی از شاخه های هوش مصنوعی است !!! بایت و پیکسل و ... هم نمیشناسد.

  12. #12
    کاربر دائمی آواتار amirsadeghi
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    system32\amir.ocx
    پست
    514
    من فکر میکنم با استفاده از بایت هم سرعت و هم دقت افزایش پیدا کنه

  13. #13

  14. #14
    کاربر دائمی آواتار amirsadeghi
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    system32\amir.ocx
    پست
    514
    ممنون راهنمایی خوبی بود
    پیشنهاد می کنم دانلود کنید

  15. #15

    جالب که بدانید

    سلام. من دارم روی یک پروژه پردازش تصویر کار می کنم که فیلمی را می گیرد و مسیر اجسام متحرک رو تشخیص می ده. من می خواستم frame هایی که دارم رو به grayScale تبدیل کنم. در حالت safe این کار خیلی پردازش میگیره. توی MSDN یک کد هست که حالت unsafe هست و خیلی قشنگه. پیشنهاد می کنم که اون کد رو ببینید. اون کد عکس رنگی رو با سه الگریتم به grayScale تبدیل می کنه

  16. #16
    اگه فقط یکی بودن عکسا مهمه میشه از hash code استفاده کرد.
    بدین ترتیب که Hash code دو تا عکس رو حساب می کنیم و اگه مساوی بودند دو عکس یکی هستند. (hash code بر اساس بایتهای فایل بدست می آیند و مانند اثر انگشت هستند)

  17. #17
    اگه فقط یکی بودن عکسا مهمه میشه از hash code استفاده کرد.
    بدین ترتیب که Hash code دو تا عکس رو حساب می کنیم و اگه مساوی بودند دو عکس یکی هستند. (hash code بر اساس بایتهای فایل بدست می آیند و مانند اثر انگشت هستند)

  18. #18
    کاربر دائمی آواتار reza.palang
    تاریخ عضویت
    دی 1385
    محل زندگی
    میون یهک جفت کروشه
    پست
    299
    این راه ها هیچ کدوم عملی نیست. این یه مبحث توی هوش مصنوعی هست که به این راحتی ها و با یه برنامه کوچیک و با یه تاپیک درست بشو نیست. کتاب digital image processing دارم که 800 صفحه هست.
    من خودم دارم میخونمش. اگه به این موضوع علاقه مندین پیشنهد من اینه که بخونیدش
    ظاهرا این تاپیک در زمان خودش هم نتیجه ای نداشته.

  19. #19
    hash code کاربرد گسترده ای دارد.
    از مهمترین کاربردهای آن این است که سیستم های اینترنتی جای ذخیره پسورد در دیتابیس hash code پسورد رو ذخیره می کنن و زمانی که کاربر می خواهد وارد شود hash پسورد ورودی رو با hash که در دیتابیس ذخیره شده چک می شه و اگه یکی بود یعنی پسورد درسته

  20. #20
    کاربر دائمی آواتار reza.palang
    تاریخ عضویت
    دی 1385
    محل زندگی
    میون یهک جفت کروشه
    پست
    299

    Angry

    نقل قول نوشته شده توسط alirezavafi مشاهده تاپیک
    hash code کاربرد گسترده ای دارد.
    از مهمترین کاربردهای آن این است که سیستم های اینترنتی جای ذخیره پسورد در دیتابیس hash code پسورد رو ذخیره می کنن و زمانی که کاربر می خواهد وارد شود hash پسورد ورودی رو با hash که در دیتابیس ذخیره شده چک می شه و اگه یکی بود یعنی پسورد درسته
    روی صحبت من شما نبودی. تمام راه حل های ارائه شده بود (از جمله پست شما)
    من نگفتم hash codeکاربرد وسیعی نداره. خب، داشته باشه.
    یه پیشنهاد دوستانه: سعی کن موضوع تاپیک رو بخونی. اینجا جای صحبت در مورد امکانات و کاربرد hash code و اینکه چطور کار میکنه نیست.

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

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