سه شنبه ۵ اردیبهشت ۱۳۹۶
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 

 
 
 پردازش تصاویر در VB.NET
.NET Visual Basic
تاریخ ثبت:  ۹۰/۵/۱۷
تعداد نمایش:  ۷۲۲۲
  نویسنده: رسول جورمند
 
   ۱۳  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share

مقاله حاضر به منظور آموزش كار با تصاوير در VB.NET نوشته شده است.

با استفاده از این مقاله و بهره گيري از آموزش هاي داده شده می توانید نرم افزاري را ايجاد كنيد كه در آن به پردازش تصاوير بپردازيد. هر چند كه آموزش هاي داده شده ساده هستند ولي شما مي توانيد با بهره گيري از تكنولوژي هاي ديگر آن را گسترش دهيد. همرا ه اين آموزش يك نمونه از برنامه ايجاد شده به زبان VB.NET ارائه شده است كه در انتهاي اين مقاله جهت دانلود قرار داده شده است، كه مي تواند به شما در درك بهتر اين مقاله كمك كند. اميدوارم كه اين مقاله مورد رضايت شما واقع گردد.

الگوريتم اعمال فيلتر قرمز بر روي تصوير

ابتدا هر پيكسل از تصوير را جدا كرده و در يك متغير از نوع رنگ (Color ) قرار مي دهيم، مقدار رنگ قرمز، آبي و سبز آن را استخراج كرده، هر يك را در يك متغيري از نوع عدد صحيح (Integer ) قرار مي دهيم، رنگ آبي و سبز را با 0 مقدار دهي مي كنيم، ولي به مقدار رنگ قرمز دست نمي زنيم. مقدار بدست آمده براي هر رنگ را در يك متغير (متغييري كه براي نگهداري مقدار رنگ ها درنظر گرفته مي شود بهتر است نام رنگ باشد) قرار مي دهيم. در نهايت با استفاده از تابع SetPixel ، پيكسل و متغيرهاي حاوي رنگهاي قرمز، آبي و سبز را در محل اصلي قرار مي دهيم.


الگوريتم اعمال فيلتر سبز بر روي تصوير

       ابتدا هر پيكسل از تصوير را جدا كرده و در يك متغير از نوع رنگ (Color ) قرار مي دهيم، مقدار رنگ قرمز، آبي و سبز آن را استخراج كرده، هر يك را در يك متغيري از نوع عدد صحيح (Integer ) قرار مي دهيم، رنگ آبي و قرمز را با 0 مقدار دهي مي كنيم، ولي به مقدار رنگ سبز دست نمي زنيم. مقدار بدست آمده براي هر رنگ را در يك متغير (متغييري كه براي نگهداري مقدار رنگ ها درنظر گرفته مي شود بهتر است نام رنگ باشد) قرار مي دهيم. در نهايت با استفاده از تابع SetPixel ، پيكسل و متغيرهاي حاوي رنگهاي قرمز، آبي و سبز را در محل اصلي قرار مي دهيم.

الگوريتم اعمال فيلتر آبي بر روي تصوير

       ابتدا هر پيكسل از تصوير را جدا كرده و در يك متغير از نوع رنگ (Color ) قرار مي دهيم، مقدار رنگ قرمز، آبي و سبز آن را استخراج كرده، هر يك را در يك متغيري از نوع عدد صحيح (Integer ) قرار مي دهيم، رنگ قرمز و سبز را با 0 مقدار دهي مي كنيم، ولي به مقدار رنگ قرمز دست نمي زنيم. مقدار بدست آمده براي هر رنگ را در يك متغير (متغييري كه براي نگهداري مقدار رنگ ها درنظر گرفته مي شود بهتر است نام رنگ باشد) قرار مي دهيم. در نهايت با استفاده از تابع SetPixel ، پيكسل و متغيرهاي حاوي رنگهاي قرمز، آبي و سبز را در محل اصلي قرار مي دهيم.

الگوريتم اعمال روشنايي بر روي تصوير

براي استفاده از اين الگوريتم ابتدا بايد هر پيكسل از تصوير را جدا كرده و در يك متغير از نوع رنگ (Color ) قرار مي دهيم، مقدار رنگ قرمز، آبي و سبز آن را استخراج كرده، هر يك را در يك متغيري از نوع عدد صحيح (Integer ) قرار مي دهيم (متغييري كه براي نگهداري مقدار رنگ ها درنظر گرفته مي شود بهتر است نام رنگ باشد)، به هر كدام از سه رنگ اصلي قرمز، آبي و سبز، مقدار تنظيم شده براي روشنايي را اضافه مي كنيم سپس با استفاده از دستور شرطي، معين مي كنيم كه اگر مقدار به دست آمده براي هر يك از رنگ ها از 0 كمتر بود آن را با 1 مقدار دهي كند و اگر از 255 بزرگتر بود آن را با 255 مقدار دهي كند. در نهايت با استفاده از تابع SetPixel پيكسل و متغيرهاي حاوي رنگهاي قرمز، آبي و سبز را در محل اصلي قرار مي دهيم.

الگوريتم اعمال كنتراست بر روي تصوير

        مقدار مورد نظر براي اعمال كنتراست بايد عددي بين 100 تا -100 باشد. عدد وارد شده توسط كاربر بايد در 100.0 جمع شود و سپس در 100.0 تقسيم شود و در نهايت مقدار به دست آمده را در خودش ضرب مي كنيم و در متغير Contrast قرار مي دهيم.

هر پيكسل از تصوير را جدا كرده و در يك متغير از نوع رنگ (Color ) قرار مي دهيم، مقدار رنگ قرمز، آبي و سبز آن را استخراج كرده، هر يك را در يك متغيري از نوع عدد اعشاري (Double ) قرار مي دهيم (متغييري كه براي نگهداري مقدار رنگ ها درنظر گرفته مي شود بهتر است نام رنگ باشد)، مقدار رنگ قرمز را در 255.0 تقسيم مي كنيم، 0.5 از آن كم مي كنيم در Contrast ضرب مي كنيم 0.5 به آن اضافه مي كنيم و در مقدار بدست آمده را در 255 ضرب مي كنيم سپس با استفاده از دستور شرطي تعيين مي كنيم كه اگر عدد بدست آمده از 0  كمتر باشد آن را با 0 مقدار دهي كند و اگر عدد از 255 بزرگتر بود آن با 255 مقدار دهي كند اين كار را با ساير متغيرهاي مربط به رنگ ها انجام مي دهيم و در نهايت با استفاده از تابع SetPixel پيكسل و متغيرهاي حاوي رنگهاي قرمز، آبي و سبز را در محل اصلي قرار مي دهيم.

الگوريتم Invert

اين الگوريتم برخلاف ظاهري مشكل، ولي به جرأت مي توان گفت كه ساده ترين الگوريتم است. براي استفاده از اين الگوريتم ابتدا هر پيكسل از تصوير را جدا كرده و در يك متغير از نوع رنگ (Color ) قرار مي دهيم، مقدار رنگ قرمز، آبي و سبز آن را استخراج كرده، هر يك را در يك متغيري از نوع عدد صحيح (Integer ) قرار مي دهيم (متغييري كه براي نگهداري مقدار رنگ ها درنظر گرفته مي شود بهتر است نام رنگ باشد)، سپس مقدار بدست آمده از تمام متغيرهاي مربوط به رنگ ها را از 255 كم مي كنيم، در نهايت با استفاده از تابع SetPixel پيكسل و متغيرهاي حاوي رنگهاي قرمز، آبي و سبز را در محل اصلي قرار مي دهيم.

تبديل تصوير به فرمت GrayScale

از اين الگوريتم براي تبديل عكس هاي رنگي به سياه و سفيد استفاده مي شود. ابتدا هر پيكسل از تصوير را جدا كرده و در يك متغير از نوع رنگ (Color ) قرار مي دهيم، مقدار رنگ قرمز، آبي و سبز آن را استخراج كرده، هر يك را در يك متغيري از نوع عدد صحيح (Integer ) قرار مي دهيم (متغييري كه براي نگهداري مقدار رنگ ها درنظر گرفته مي شود بهتر است نام رنگ باشد)،  سپس مقدار همه متغيرها را در هم جمع مي كنيم و بر 3 تقسيم مي كنيم و در يك متغير (بعنوان مثال با نام colorGray ) از نوع عدد صحيح (Integer ) قرار مي دهيم و در نهايت با استفاده تابع SetPixel پيكسل و رنگ ايجاد شده (همان ColorGray ) را در محل اصلي قرار مي دهيم.

الگوريتم تشخيص لبه

هدف از تشخيص لبه، تشخيص لبه ها در تصوير مي باشد. در اين روش در تمام بخش هاي تصوير، پيكسل ها را بررسي مي كنيم و هر رنگ را با پيكسل مجاور سمت راست و پايين آن مقايسه مي كنيم. اگر نتيجه مقايسه زياد باشد در نتيجه در خروجي به رنگ سفيد و در غير اينصورت به رنگ سياه رسم مي شود.


به عنوان مثال اگر دو رنگ (C1=(R1,G1,B1  و (C2(R2,G2,B2 داشته باشيم اختلاف يا فاصله بين دو رنگ با فرمول زير محاسبه مي شود:

edge detection

استخراج رنگ از تصوير

در اين الگريتم بجاي بررسي هر پيكسل با پيكس هاي مجاورش آن را با رنگ مشخصي مقايسه مي كنيم. اين الگريتم تمامي اشياء موجود در تصوير را كه رنگ مشخصي دارند پيدا مي كند. از اين الگريتم بيشتر در رباتيك استفاده مي شود. به عنوان مثال در تصويري كه توسط دوربين ربات گرفته شده است توپ قرمز رنگ مشخص مي شود و ربات به سمت آن حركت مي كند. در اين الگريتم مقدار رنگهاي هر پيكسل با مقدار رنگهاي، رنگ انتخاب شده مقايسه مي شود. اگر نتيجه مقايسه زياد باشد در نتيجه در خروجي به رنگ سفيد و در غير اينصورت به رنگ سياه رسم مي شود.

Horizontal  flip

اين الگوريتم را مي توان با كمترين مقدار كد نويسي پياده سازي كرد. براي پياده سازي اين الگوريتم ابتدا تصوير را در يك متغير از نوع Bimap قرار مي دهيم.

Dim Image As New Bitmap(picCanvas.Image)

و سپس از متد RotateFlip براي اعمال Flip بر روي تصوير استفاده مي كنيم و در نهايت تصوير موجود در متغير را به كنترل Image  موجود در برنامه منتقل مي كنيم.

Image.RotateFlip(RotateFlipType.RotateNoneFlipX)

Vertical  flip

پياده سازي اين الگريتم مانند پياده سازي الگريتم قبلي است با اين تفاوت كه در كد نويسي مقداري تفاوت دارند.

Image.RotateFlip(RotateFlipType.RotateNoneFlipY)

پياده سازي الگريتم Rotate

اين الگوريتم مانند الگريتم Flip است. مي توان آن را  با كمترين مقدار كد نويسي پياده سازي كرد. براي پياده سازي اين الگوريتم ابتدا تصوير را در يك متغير از نوع Color قرار مي دهيم و سپس از متد RotateFlip براي اعمال Rotate بر روي تصوير استفاده مي كنيم و در نهايت تصوير موجود در متغير را به كنترل Image   موجود در برنامه منتقل مي كنيم.

Image.RotateFlip(RotateFlipType.Rotate90FlipNo)

در پروژه اي كه همراه مقاله قرار داده ام عمليات هاي متنوع و مختلف ديگري مانند: Crop، Resize، Gamma و ... قرار داده شده است.

در ادامه نمونه اي از يك برنامه آماده را قرار داده ام كه با استفاده از آن مي توانيد به قابليت هاي موجود در پردازش تصويري پي ببريد.

فایل ضمیمه مقاله: Image-Processing.rar
  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
رسول جورمند
همه مقاله های نوشته شده توسط این کاربر (۱)
 
  پیام جدید
صفحه ۱ - پیامهای اصلی ۱ تا ۲ از مجموع ۲ پیام اصلی
اولین قبلی بعدی

 عنوان فرستنده تاریخ
 
مشکل مقاله احد اسماعيل پور ۱۳۹۱/۱۲/۱
 
لینک مشکل دارد صادق غلامی پور ۱۳۹۱/۱۰/۲۲
اولین قبلی بعدی

Copyright © 2006 - 2016 All Rights Reserved.
Please direct your questions or comments to