دسترسی سریعدسترسی سریع
  • ۰۳۱-۹۱۰۰۱۸۸۱
  • درخواست دمو
بهسان اندیش
  • صفحه اصلی
  • محصولات
    • نرم افزار پلاک خوان
      • نرم افزار ثبت تردد جاده ای
      • نرم افزار مدیریت پارکینگ
      • نرم افزار تعمیرگاه ، کارواش و تعویض روغن
    • نرم افزار باسکول
    • راهکارهای سازمانی
      • نرم افزار انبار و حسابداری
    • محصولات جانبی
      • دوربین پلاک خوان
      • ماژول رله کنترل راهبند
  • نمونه کار ها
    • سامانه جامع پلاکخوان خودرو
    • سامانه جامع مدیریت باسکول
    • سامانه قرائت فرم های چند گزینه ای
  • وبلاگ
  • ارتباط با ما
    • تماس با ما
    • درباره ما
    • دعوت به همکاری
  • جستجو
  • منو

نوشته‌ها

آشنایی با Thread های Foreground و Background

آموزش های زبان برنامه نویسی سی شارپ

کار با Thread ها در زبان سی شارپ – آشنایی با Thread های Foreground و Background در دات نت

زمانی که یک Thread جدید در برنامه های دات نت ایجاد می شوند، این Thread ها می توانند به دو صورت Foreground و Background اجرا شوند:

  1. Thread های Foreground: زمانی که کی Thread در حالت Foreground اجرا می شود باعث می شود که Thread اصلی برنامه تا زمان کامل شدن اجرای Thread ایجاد شده در حالت اجرا بماند. یعنی از Shut-down شدن Primary Thread توسط CLR جلوگیری می شود.
  2. Thread های Background: این Thread ها که با نام Daemon Thread شناخته می شوند به CLR می گوید که اجرای این Thread آنقدر اهمیت ندارد که Thread اصلی برنامه بخواهد منتظر بماند تا عملیات آن به اتمام برسد و می تواند در هر زمان که Thread اصلی برنامه به اتمام رسید، به صورت خودکار Thread های Background را نیز از بین ببرد.

توجه کنید که کلیه Thread هایی که در برنامه ها ایجاد می کنیم به صورت پیش فرض در حالت Foreground قرار دارند. برای آشنایی بیشتر با این موضوع نمونه کد زیر را در نظر بگیرید:

static void Main(string[] args)
{
    var thread = new Thread(PrintNumbers);
    thread.Start();
}

public static void PrintNumbers()
{
    for (int counter = 1; counter < 10; counter++)
    {
        Console.WriteLine(counter);
        Thread.Sleep(200);
    }
}

همانطور که گفتیم Thread ایجاد شده به صورت پیش فرض از نوع Foreground است و به همین دلیل تا زمانی که روند اجرای Thread ایجاد شده به اتمام نرسد از برنامه خارج نمی شویم و کلیه اعداد در خروجی چاپ می شوند. اما در کد زیر Thread ایجاد شده به صورت Background است و خواهیم دید که پس از اجرای برنامه به دلیل اینکه Thread اصلی زودتر از Thread ایجاد شده به اتمام می رسد، CLR به صورت خودکار Thread ایجاد شده را از بین می برد و اعداد به صورت کامل در خروجی نمایش داده نمی شوند:

static void Main(string[] args)
{
    var thread = new Thread(PrintNumbers);
    thread.IsBackground = true;
    thread.Start();
}

public static void PrintNumbers()
{
    for (int counter = 1; counter < 10; counter++)
    {
        Console.WriteLine(counter);
        Thread.Sleep(200);
    }
}

در برنامه های واقعی باید با دقت نوع Thread ها را انتخاب کرد، برای مثال فرض کنید که در برنامه شما در یک Thread جداگانه عملیاتی بر روی داده های بانک اطلاعاتی انجام می شود و نتیجه این عملیات در انتها باید در جایی ذخیره شود، می توانید برای اینکار یک Thread از نوع Foreground ایجاد کرده تا پس از خروج از برنامه، Thread اصلی منتظر اتمام انجام عملیات شده و سپس عملیات خروج کامل انجام شود. در مبحث بعدی در مورد موضوع همزمانی یا Concurrency صحبت می کنیم که از مشکلات اساسی در زمینه برنامه نویسی asynchronous می باشد و در مورد راهکار های حل این مشکل نیز صحبت خواهیم کرد.

منبع


قسمت اول آموزش-برنامه نویسی Asynchronous – آشنایی با Process ها، Thread ها و AppDomain ها

قسمت دوم آموزش- آشنایی با ماهیت Asynchronous در Delegate ها

قسمت سوم آموزش-آشنایی با فضای نام System.Threading و کلاس Thread

قسمت چهارم آموزش- آشنایی با Thread های Foreground و Background در دات نت

قسمت پنجم آموزش- آشنایی با مشکل Concurrency در برنامه های Multi-Threaded و راهکار های رفع این مشکل

قسمت ششم آموزش- آشنایی با کلاس Timer در زبان سی شارپ

قسمت هفتم آموزش-آشنایی با CLR ThreadPool در دات نت

قسمت هشتم آموزش- مقدمه ای بر Task Parallel Library و کلاس Parallel در دات نت

قسمت نهم آموزش- برنامه نویسی Parallel:آشنایی با کلاس Task در سی شارپ

قسمت دهم آموزش-برنامه نویسی Parallel در سی شارپ :: متوقف کردن Task ها در سی شارپ – کلاس CancellationToken

قسمت یازدهم آموزش- برنامه نویسی Parallel در سی شارپ :: کوئری های Parallel در LINQ

قسمت دوازدهم آموزش- آشنایی با کلمات کلیدی async و await در زبان سی شارپ

قسمت سیزدهم آموزش- استفاده از متد WhenAll برای اجرای چندین Task به صورت همزمان در سی شارپ

۱۸ فروردین ۱۳۹۹/0 نظرها/توسط م. دلیری
http://behsanandish.com/wp-content/uploads/images-5-1.jpg 344 304 م. دلیری https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png م. دلیری2020-04-06 10:00:422019-11-30 10:19:38آشنایی با Thread های Foreground و Background

حذف نویز تصویر به کمک هوش مصنوعی

وبلاگ

مقدمه

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

شرح خبر

این گروه متشکل از محققان انویدیا، MIT و دانشگاه آلتو در توسعه این سیستم از یادگیری عمیق بهره برده اند که بر خلاف روش های قبلی نیازی به مشاهده نمونه های کامل از تصویر مورد نظر داشته و تنها با استفاده از داده های ناقص یا دو تصویر غیر واضح به افزایش کیفیت تصاویر می پردازد. علاوه بر این نتیجه نهایی افزایش کیفیت، حذف متون یا اصلاح تصویر نسبت به روش های قبلی به مراتب بهتر است.

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

آزمایشات این گروه نشان داده که از تصاویر تخریب شده از طریق نویزهایی نظیر «گاوسی افزایشی»، «پواسون» یا ترکیب آنها می توان برای تولید تصاویر بهینه ای استفاده کرد که کیفیت آن‌ها با تصاویر بازیابی‌ شده از عکس های بدون مشکل تقریبا برابر است.
کاربردهای علمی این سیستم مبتنی بر یادگیری عمیق شامل زمینه های پزشکی است که در آن می توان کیفیت اسکن های MRI و تصاویر دیگر را به شکل چشمگیری افزایش داد.

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

۸ فروردین ۱۳۹۹/0 نظرها/توسط محمد مهدی ابراهیمی
http://behsanandish.com/wp-content/uploads/photo_2018-07-25_11-18-06.jpg 380 600 محمد مهدی ابراهیمی https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png محمد مهدی ابراهیمی2020-03-27 10:00:282019-11-30 10:12:30حذف نویز تصویر به کمک هوش مصنوعی

مقالات و جزوات آموزشی پیرامون هیستوگرام

آموزش عمومی پردازش تصویر و بینایی ماشین, مقالات

مقالات

۱٫بررسی روشهای متعادل سازی هیستوگرام در بهبود تصویر

چکیده: افزایش کنتراست به عنوان یکی از مسائل مهم در پردازش تصویر است.متعادل سازی هیستوگرام (HE) یکی از روش های معمول برای بهبود کنتراست در تصاویر دیجیتال است و یک روش افزایش کنتراست ساده و موثر است با این حال، این روش معمولا باعث کنتراست بیش از حد می شود که باعث ظاهر غیر طبیعی در تصویر پردازش شده می شود. هم چنین HE میانگین روشنایی تصویر را به خوبی حفظ نمی کند بنابراین روش های دیگری برای متعادل سازی تصویر با حفظ روشنایی تصویر ارائه شده است. این مقاله به بررسی فرم های جدید هیستوگرام برای افزایش کنتراست تصویر می پردازد. تفاوت عمده میان روش ها معیارهای مورد استفاده، تقسیم هیستوگرام ورودی است. متعادل سازی دو هیستوگرام با حفظ روشنایی(BBHE) میانگین مقادیر شدت به عنوان نقطه جداسازی استفاده می کند. متعادل سازی دو هیستوگرام با حداقل خطای متوسط روشنایی(MMBEBHE) است. متعادل سازی هیستوگرام متوسط – مجرای بازگشتی(RMSHE) بهبود یافته BBHE است. روش یکنواخت سازی پویلی هیستوگرام با حفظ روشنایی(BPDHE) بسط یافته MPHBP و DHE است.
واژه های کلیدی: بهبود کنتراست، متعادل سازی هیستوگرام، خطای متوسط روشنایی، تقسیم بندی هیستوگرام، حفظ روشنایی
فایل PDF – در ۲۲ صفحه- نویسنده : نوشین الله بخشی

بررسی روشهای متعادل سازی هیستوگرام در بهبود تصویر

رمز فایل : behsanandish.com


۲٫ بهبود کیفیت تصاویر آندوسکوپی از طریق تعدیل هیستوگرام فازی و توزیع ناهمسانگرد کنتراست

چکیده: در این مقاله روشی جدید برای بهبود کیفیت تصاویر آندوسکوپی به وسیله ی تعدیل هیستوگرام فازی و توزیع ناهمسانگرد کنتراست ارائه می شود. تصاویر آندوسکوپی موجود در کشورمان از لحاظ نور و کیفیت وضعیت مناسبی ندارند و همین موضوع تبدیل به چالشی جهت تشخیص انواع بیماری های دستگاه گوارش شده است. برای غلبه بر این مشکلات و کمک به پزشکان برای تشخیص بهتر، در این مقاله یک روش وفقی با استفاده از تعدیل هیستوگرام فازی و توزیع کنتراست ارائه می شود. همچنین در روش پیشنهادی مفهوم جدیدی از توزیع کنتراست بر اساس آنالیز محلی تصاویر آندوسکوپی معرفی می شود. سپس به وسیله انتخاب وفقی پارامتر هدایت که نقشی مهم در توزیع ایفا می کند، توزیع کنتراست به منظور بهبود کیفیت تصاویر آندوسکوپی به تصویر اعمال می شود و در نهایت بعد از انتقال به سه فضای رنگ YIQ ،XYZ و HSI به کمک روش تعدیل هیستوگرام فازی، تغییرات نامحسوس رنگ نمایان تر می شود. نتایج تجربی نشان می دهد که روش ارئه شده عملکرد قابل توجهی در افزایش قابلیت دیداری تصاویر آندوسکوپی از خود نشان می دهد.

 

واژه های کلیدی: تصاویر آندوسکوپی، توزیع ناهمسانگرد کنتراست، تعدیل هیستوگرام فازی

فایل PDF – در ۶ صفحه- نویسندگان : حسین قیصری، میرحسین دزفولیان

بررسی روشهای متعادل سازی هیستوگرام در بهبود تصویر

رمز فایل : behsanandish.com


۳٫ تشخیص زود هنگام پوسیدگی دندان با استفاده از آنالیز هیستوگرام و طیف توان

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

واژه های کلیدی: پوسیدگی دندان، هیستوگرام، طیف توان، GUI، شدت پیکسل

فایل PDF – در ۶ صفحه- نویسندگان : محمد کریمی مریدانی، شبنم قهاری و فاطمه غلامی

تشخیص زود هنگام پوسیدگی دندان با استفاده از آنالیز هیستوگرام و طیف توان

رمز فایل : behsanandish.com


۴٫ بازیابی تصاویر چهره با استفاده از ترکیب هیستوگرام گرادیان و الگوی باینری محلی

چکیده: بازیابی چهره، یک موضوع تحقیقاتی مهم در پردازش تصویر است که هدف آن استخراج تصاویر چهره ای است که مشابه با یک تصویر جستار باشند. در این مقاله روشی برای بازیابی تصاویر چهره با استفاده از ترکیب هیستوگرام گرادیان و الگوی باینری محلی(LBP) پیشنهاد شده است. ترکیب این دو روش مقاومت در مقابل تغییرات موجود در تصاویر چهره را افزایش می دهد و در نتیجه عملکرد سیستم را در بازیابی تصاویر بهبود می بخشد. برای افزایش توانایی سیستم، یک طرح فیدبک ارتباطی مبتنی بر ماشین بردار پشتیبان(SVM) معرفی می کنیم. آزمایش ها بر روی پایگاه داده ی AR و در دو حالت بدون تصاویر با مانع و با تصاویر با مانع اناجم شده است. نتایج آزمایش ها نشان می دهد که روش پیشنادی ما به خوبی می تواند تصاویر چهره را بازیابی کند. در ادامه، روش پیشنهادی خود را با برخی از روش های موفق در توصیف چهره مقایسه کرده ایم. معیار دقت متوسط میانگین(MAP) برای روش پیشنهادی در حالت های اول و دوم آزمایش به ترتیب برابر است با ۹۴/۴۰%  و ۶۸/۱۲%. در حالی که بهترین نرخ برای روش های مقایسه شده برابر است با ۹۰/۳۷% و ۶۱/۹۹%. این نتایج نشان می دهد روش پیشنهادی ما نسبت به این روش ها بهتر عمل می کند و یک روش خوب برای بازیابی تصاویر چهره است.

واژه های کلیدی: الگوی باینری محلی، بازیابی چهره، فیدبک ارتباطی، ماشین بردار پشتیبان، هیستوگرام گرادیان.

فایل PDF – در ۱۱ صفحه- نویسندگان : محمد قاصری و حسین ابراهیم نژاد

ﺑﺎزﯾﺎﺑﯽ ﺗﺼﺎوﯾﺮ ﭼﻬﺮه ﺑﺎ اﺳﺘﻔﺎده از ﺗﺮﮐﯿﺐ ﻫﯿﺴﺘﻮﮔﺮام ﮔﺮادﯾﺎن و اﻟﮕﻮی ﺑﺎﯾﻨﺮی ﻣﺤﻠﯽ

رمز فایل : behsanandish.com


۵٫ بهبود وفقی کنتراست با استفاده از متعادل سازی بهینه هیستوگرام دو بعدی

چکیده: در این مقاله، برای بهبود وفقی کنتراست به ارائه و حل یک مسئله ی بهینه سازی در هیستوگرام دوبعدی پرداخته شده است. برای جلوگیری از بروز اثرات نامطلوب ناشی از دست کاری هیستوگرام تصویر، در بیان ریاضی مسأله در این مقاله همانند روش های مشابه دیگر، از یک سو هیستوگرام بهینه ی خروجی از روی هیستوگرامی دوبعدی که بیشترین شباهت را به هیستوگرام دوبعدی تصویر ورودی و نیز توزیع یکنواخت داشته باشد به دست می آید و از سویی دیگر بر خلاف دیگر روش ها، با وزن دهی وفقی، اطلاعات محلی مناسبی را نیز دراین جستجو در نظر می گیرد. نگاشت مناسب با حل این مسأله ی بهینه سازی به دست آمده و آزمایش های گوناگونی که بر روی تصاویر گوناگون انجام شده است، درستی مدل بهینه سازی را نشان می دهد. به کارگیری الگوریتم پیشنهادی بر روی تصاویر متعدد، در مقایسه با روش مرجع به صورت میانگین به بهبود ۷۵ درصدی و ۳ درصدی معیارهای AMBEN  و  DEN  منجر شده است.

واژه های کلیدی: بهبود کنتراست، هیستوگرام دوبعدی، هموارسازی هیستوگرام

فایل PDF – در ۱۰ صفحه- نویسندگان : سحر ایروانی و مهدی ازوجی

ﺑﻬﺒﻮد وﻓﻘﯽ ﮐﻨﺘﺮاﺳﺖ ﺑﺎ اﺳﺘﻔﺎده از ﻣﺘﻌﺎدل ﺳﺎزی ﺑﻬﯿﻨﻪ ی ﻫﯿﺴﺘﻮﮔﺮام دوﺑﻌﺪی

رمز فایل : behsanandish.com


۶٫ A Study for Applications of Histogram in Image Enhancement

مطالعه برای کاربرد هیستوگرام در بهبود تصویر

Abstract- Image Enhancement aims at improving the visual quality of input image for a particular area. The criterion used by enhancement algorithms to enhance the image is; using histogram details of that image. This paper defines the various applications of histograms through which they help in the enhancement process. The paper also represents three basic histogram processing techniques- histogram sliding, histogram stretching, and histogram equalization, and how these techniques help in enhancement process, which factors effect these techniques. We examine subjectively the effect of these processing techniques. Comparative analysis of these techniques is also carried out.

Keywords: Histogram Equalization, Histogram Sliding, Histogram Stretching, Image Enhancement, Visual Quality.

فایل PDF – در ۵ صفحه- نویسندگان : Harpreet Kaur, Neelofar Sohi

A Study for Applications of Histogram in Image Enhancement

رمز فایل : behsanandish.com


۷٫ An Adaptive Histogram Equalization Algorithm on the Image Gray Level Mapping

الگوریتم انعکاس هیستوگرام سازگار بر روی نقشه سطح خاکستری تصویر

Abstract
The conventional histogram equalization algorithm is easy causing information loss. The paper presented an adaptive histogram-based algorithm in which the information entropy remains the same. The algorithm introduces parameter ȕ in the gray level mapping formula, and takes the information entropy as the target function to adaptively adjust the spacing of two adjacent gray levels in the new histogram. So it avoids excessive gray pixel merger and excessive bright local areas of the image. Experiments show that the improved algorithm may effectively improve visual effects under the premise of the same information entropy. It is useful in CT image processing.

Keywords: Histogram Equalization; Image Enhancement; Gray Level Mapping; Information Entropy

فایل PDF – در ۸ صفحه- نویسندگان : Youlian Zhu, Cheng Huang

An Adaptive Histogram Equalization Algorithm on the Image

رمز فایل : behsanandish.com


۸٫ Contrast Enhancement Algorithm Based on Gap Adjustment for Histogram Equalization

الگوریتم تقویت کنتراست براساس تنظیم گاف برای برابری هیستوگرام

Abstract: Image enhancement methods have been widely used to improve the visual effects of images. Owing to its simplicity and effectiveness histogram equalization (HE) is one of the methods used for enhancing image contrast. However, HE may result in over-enhancement and feature loss problems that lead to unnatural look and loss of details in the processed images. Researchers have proposed various HE-based methods to solve the over-enhancement problem; however, they have largely ignored the feature loss problem. Therefore, a contrast enhancement algorithm based on gap adjustment for histogram equalization (CegaHE) is proposed. It refers to a visual contrast enhancement algorithm based on histogram equalization (VCEA), which generates visually pleasing enhancedimages,andimprovestheenhancementeffectsofVCEA.CegaHEadjuststhegapsbetween two gray values based on the adjustment equation, which takes the properties of human visual perception into consideration, to solve the over-enhancement problem. Besides, it also alleviates the feature loss problem and further enhances the textures in the dark regions of the images to improve the quality of the processed images for human visual perception. Experimental results demonstrate that CegaHE is a reliable method for contrast enhancement and that it significantly outperforms VCEA and other methods.

Keywords: cumulative distribution function (CDF); contrast enhancement; histogram equalization (HE); human visual perception; gap adjustment

فایل PDF – در ۱۸ صفحه- نویسندگان : Chung-Cheng Chiu , and Chih-Chung Ting

Contrast Enhancement Algorithm Based on Gap

رمز فایل : behsanandish.com


۹٫ Enhancement of Images Using Histogram Processing Techniques

بهبود تصاویر با استفاده از تکنیک های پردازش هیستوگرام

Abstract- Image enhancement is a mean as the improvement of an image appearance by increasing dominance of some features or by decreasing ambiguity between different regions of the image. Image enhancement processes consist of a collection of techniques that seek to improve the visual appearance of an image or to convert the image to a form better suited for analysis by a human or machine. Many images such as medical images, remote sensing images, electron microscopy images and even real life photographic pictures, suffer from poor contrast. Therefore it is necessary to enhance the contrast.The purpose of image enhancement methods is to increase image visibility and details. Enhanced image provide clear image to eyes or assist feature extraction processing in computer vision system. Numerous enhancement methods have been proposed but the enhancement efficiency, computational requirements, noise amplification, user intervention, and application suitability are the common factors to be considered when choosing from these different methods for specific image processing application.

Keywords: Enhancement, Histogram processing techniques, PSNR,MSE.

فایل PDF – در ۵ صفحه- نویسندگان :Komal Vij , Yaduvir Singh

Enhancement of Images Using Histogram Processing

رمز فایل : behsanandish.com


۱۰٫ USE OF HISTOGRAM EQUALIZATION IN IMAGE PROCESSING FOR IMAGE ENHANCEMENT

استفاده از تعادل هیستوگرام در پردازش تصویر برای افزایش تصویر

Abstract— Digital Image Processing is a rapidly evolving field with the growing applications in science & engineering. Image Processing holds the possibility of developing an ultimate machine that could perform visual functions of all living beings. The image processing is a visual task, the foremost step is to obtain an image i.e. image acquisition then enhancement and finally to process. In this paper there are details for image enhancement for the purpose of image processing. Image enhancement is basically improving the digital image quality. Image histogram is helpful in image enhancement. The histogram in the context of image processing is the operation by which the occurrences of each intensity value in the image is shown and Histogram equalization is the technique by which the dynamic range of the histogram of an image is increased.

Keywords- Image processing, image enhancement, image histogram, Histogram equalization

فایل PDF – در ۵ صفحه- نویسندگان :Sapana S. Bagade , Vijaya K. Shandilya

USE OF HISTOGRAM EQUALIZATION IN IMAGE PROCESSING FOR IMAGE ENHANCEMENT

رمز فایل : behsanandish.com


جزوات آموزشی

۱٫ Computer Vision – Histogram Processing

۱٫ بینایی کامپیوتر- پردازش هیستوگرام

فایل PDF – در ۴۰ صفحه- نویسنده : Dr. S. Das 

Computer Vision -histogram processing

رمز فایل : behsanandish.com


۲٫ Digital Image Processing (CS/ECE ۵۴۵)  Lecture ۲: Histograms and Point Operations (Part ۱)

پردازش تصویر دیجیتال(CS/ECE 545)  درس ۲: هیستوگرام و عملیات نقطه

فایل PDF – در ۵۶ صفحه- نویسنده : Prof Emmanuel Agu

Digital Image Processing-histograms and point operations

رمز فایل : behsanandish.com


۳٫ Part 3: Image Processing – Digital Images and Intensity Histograms

بخش ۳: پردازش تصویر – تصاویر دیجیتال و هیستوگرام های شدت

فایل PDF – در ۵۷ صفحه- نویسنده : Georgy Gimel’farb

Digital Images and Intensity Histograms

رمز فایل : behsanandish.com


۴٫  Digital Imaging and Multimedia Histograms of Digital Images

تصویربرداری دیجیتالی و هیستوگرام های چند رسانه ای از تصاویر دیجیتال

فایل PDF – در ۱۲ صفحه- نویسنده : Ahmed Elgammal

Digital Imaging and Multimedia

رمز فایل : behsanandish.com

۴ فروردین ۱۳۹۹/0 نظرها/توسط م. دلیری
http://behsanandish.com/wp-content/uploads/hist.jpg 256 256 م. دلیری https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png م. دلیری2020-03-23 10:00:552019-11-30 10:11:37مقالات و جزوات آموزشی پیرامون هیستوگرام

رباتیک چیست؟ قسمت ۲

آموزش های عمومی هوش مصنوعی

مهندسی رباتیک چیست ؟

مهندسی رباتیک چیست ؟

ربات چيست؟

ربات يك ماشين الكترومكانيكي هوشمند است با خصوصيات زير:
– مي توان آن را مكرراً برنامه ريزي كرد.
– چند كاره است.
– كارآمد و مناسب براي محيط است.

اجزاي يك ربات

– وسايل مكانيكي و الكتريكي:
شاسي، موتورها، منبع تغذيه، …
– حسگرها (براي شناسايي محيط):
دوربين ها، سنسورهاي sonar، سنسورهاي ultrasound، …
– عملكردها (براي انجام اعمال لازم)
بازوي روبات، چرخها، پاها، …
– قسمت تصميم گيري (برنامه اي براي تعيين اعمال لازم):
حركت در يك جهت خاص، دوري از موانع، برداشتن اجسام، …
– قسمت كنترل (براي راه اندازي و بررسي حركات روبات):
نيروها و گشتاورهاي موتورها براي سرعت مورد نظر، جهت مورد نظر، كنترل مسير، ..

تاريخچه رباتيك:

– ۲۷۰ ق م : زماني كه يونانيان به ساخت مجسمه هاي متحرك ميپرداختند.
– حدود سال ۱۲۵۰ م: بيشاپ آلبرتوس ماگنوس (Bishop Albertus Magnus) ضيافتي ترتيب داد كه درآن، ميزبانان آهني از مهمانان پذيرايي مي كردند. با ديدن اين روبات، سنت توماس آكويناس (Thomas Aquinas) برآشفته شد، ميزبان آهني را تكه تكه كرد و بيشاب را ساحر و جادوگر خواند.
– سال ۱۶۴۰ م: دكارت ماشين خودكاري به صورت يك خانم ساخت و آن را Ma fille Francine ” مي ناميد.اين ماشين كه دكارت را در يك سفر دريايي همراهي مي كرد، توسط كاپيتان كشتي به آب پرتاب شد چرا كه وي تصور مي كرد اين موجود ساخته شيطان است.
– سال ۱۷۳۸ م: ژاك دواكانسن (Jacques de Vaucanson) يك اردك مكانيكي ساخت كه از بيش از ۴۰۰۰ قطعه تشكيل شده بود. اين اردك مي توانست از خود صدا توليد كند، شنا كند، آب بنوشد، دانه بخورد و آن را هضم و سپس دفع كند. امروزه در مورد محل نگهداري اين اردك اطلاعي در دست نيست.
– سال ۱۸۰۵ م: عروسكي توسط ميلاردت (Maillardet) ساخته شد كه مي توانست به زبان انگليسي و فرانسوي بنويسد و مناظري را نقاشي كند.
– سال ۱۹۲۳ م: كارل چاپك (Karel Capek) براي اولين بار از كلمه روبات (robot) در نمايشنامه خود به عنوان آدم مصنوعي استفاده كرد. كلمه روبات از كلمه چك robota گرفته شده است كه به معني برده و كارگر مزدور است. موضوع نمايشنامه چاپك، كنترل انسانها توسط روباتها بود، ولي او هرگونه امكان جايگزيني انسان با روبات و يا اينكه روباتها از احساس برخوردار شوند، عاشق شوند، يا تنفر پيدا كنند را رد مي كرد.
– سال ۱۹۴۰ م: شركت وستينگهاوس (Westinghouse Co.) سگي به نام اسپاركو (Sparko) ساخت كه هم از قطعات مكانيكي و هم الكتريكي در ساخب آن استفاده شده بود. اين اولين باري بود كه از قطعات الكتريكي نيز همراه با قطعات مكانيكي استفاده مي شد.
– سال ۱۹۴۲ م: كلمه روباتيك (robatics) اولين بار توسط ايزاك آسيموف در يك داستان كوتاه ارائه شد. ايزاك آسيموف (۱۹۲۰-۱۹۹۲) نويسنده كتابهاي توصيفي درباره علوم و داستانهاي علمي تخيلي است.
– دهه ۱۹۵۰ م: تكنولوژي كامپيوتر پيشرفت كرد و صنعت كنترل متحول شد. سؤلاتي مطرح شدند. مثلاً: آيا كامپيوتر يك روبات غير متحرك است؟
– سال ۱۹۵۴ م: عصر روبات ها با ارائه اولين روبات آدم نما توسط جرج دوول (George Devol) شروع شد.
– سال ۱۹۵۶ م: پس از توسعه فعاليتهاي تكنولوژي يك كه بعد از جنگ جهاني دوم، يك ملاقات تاريخي بين جورج سي.دوول(George C.Devol) مخترع و كارآفرين صاحب نام، و ژوزف اف.انگلبرگر (Joseph F.Engelberger) كه يك مهندس با سابقه بود، صورت گرفت. در اين ملاقات آنها به بحث در مورد داستان آسيموف پرداختند. ايشان سپس به موفقيتهاي اساسي در توليد روباتها دست يافتند و با تأسيس شركتهاي تجاري، به توليد روبات مشغول شدند. انگلبرگر شركت Unimate برگرفته از Universal Automation را براي توليد روبات پايه گذاري كرد. نخستين روباتهاي اين شركت در كارخانه جنرال موتورز (General Motors) براي انجام كارهاي دشوار در خودروسازي به كار گرفته شد. انگلبرگر را “پدر روباتيك” ناميده اند.
– دهه ۱۹۶۰ م: روباتهاي صنعتي زيادي ساخته شدند. انجمن صنايع روباتيك اين تعريف را براي روبات صنعتي ارائه كرد:
“روبات صنعتي يك وسيلة چند كاره و با قابليت برنامه ريزي چند باره است كه براي جابجايي قطعات، مواد، ابزارها يا وسايل خاص بوسيلة حركات برنامه ريزي شده، براي انجام كارهاي متنوع استفاده مي شود.”
– سال ۱۹۶۲ م: شركت خودروسازي جنرال موتورز نخستين روبات Unimate را در خط مونتاژ خود به كار گرفت.
– سال ۱۹۶۷ م: رالف موزر (Ralph Moser) از شركت جنرال الكتريك (General Electeric) نخستين روبات چهارپا را اختراع كرد.
– سال ۱۹۸۳ م: شركت Odetics يك روبات شش پا ارائه كرد كه مي توانست از موانع عبور كند و بارهاي سنگيني را نيز با خود حمل كند.
– سال ۱۹۸۵ م: نخستين روباتي كه به تنهايي توانايي راه رفتن داشت در دانشگاه ايالتي اهايو (Ohio State Uneversity) ساخته شد.
– سال ۱۹۹۶ م: شركت ژاپني هندا (Honda) نخستين روبات انسان نما را ارائه كرد كه با دو دست و دو پا طوري طراحي شده بود كه مي توانست راه برود، از پله بالا برود، روي صندلي بنشيند و بلند شود و بارهايي به وزن ۵ كيلوگرم را حمل كند
روباتها روز به روز هوشمندتر مي شوند تا هرچه بيشتر در كارهاي سخت و پر خطر به ياري انسانها بيايند.
امروزه، ۹۰% روباتها، روباتهاي صنعتي هستند، يعني روباتهايي كه در كارخانه ها، آزمايشگاهها، انبارها، نيروگاهها، بيمارستانها، و بخشهاي مشابه به كارگرفته مي شوند.در سالهاي قبل، اكثر روباتهاي صنعتي در كارخانه هاي خودروسازي به كارگرفته مي شدند، ولي امروزه تنها حدود نيمي از روباتهاي موجود در دنيا در كارخانه هاي خودروسازي به كار گرفته مي شوند.مصارف روباتها در همه ابعاد زندگي انسان به سرعت در حال گسترش است تا كارهاي سخت و خطرناك را به جاي انسان انجام دهند.براي مثال امروزه براي بررسي وضعيت داخلي رآكتورها از روبات استفاده مي شود تا تشعشعات راديواكتيو به انسانها صدمه نزند.

۳ قانون روباتيك مطرح شده توسط آسيموف:

۱- روبات ها نبايد هيچگاه به انسانها صدمه بزنند.
۲- روباتهابايد دستورات انسانها را بدون سرپيجي از قانون اوّل اجرا كنند.
۳- روباتها بايد بدون نقض قانون اوّل و دوم از خود محافظت كنند.

انواع ربات ها :

رباتهاي امروزي كه شامل قطعات الكترونيكي و مكانيكي هستند در ابتدا به صورت بازوهاي مكانيكي براي جابجايي قطعات و يا كارهاي ساده و تكراري كه موجب خستگي و عدم تمركز كارگر و افت بازده ميشد بوجود آمدند. اينگونه رباتها جابجاگر (manipulator) نام دارند. جابجاگرها معمولا در نقطه ثابت و در فضاي كاملا كنترل شده در كارخانه نصب ميشوند و به غير از وظيفه اي كه به خاطر آن طراحي شده اند قادر به انجام كار ديگري نيستند. اين وظيفه ميتواند در حد بسته بندي توليدات, كنترل كيفيت و جدا كردن توليدات بي كيفيت, و يا كارهاي پيچيده تري همچون جوشكاري و رنگزني با دقت بالا باشد.
نوع ديگر رباتها كه امروزه مورد توجه بيشتري است رباتهاي متحرك هستند كه مانند رباتهاي جابجا كننده در محيط ثابت و شرايط كنترل شده كار نميكنند. بلكه همانند موجودات زنده در دنياي واقعي و با شرايط واقعي زندگي ميكنند و سير اتفاقاتي كه ربات بايد با انها روبرو شود از قبل مشخص نيست. در اين نوع ربات هاست كه تكنيك هاي هوش مصنوعي ميبايست در كنترلر ربات(مغز ربات) به كار گرفته شود.

رباتهاي متحرك به دسته هاي زير تقسيم بندي ميشوند:

۱-رباتهاي چرخ دار
با انواع چرخ عادي
و يا شني تانك
و با پيكربندي هاي مختلف يك, دو يا چند قسمتي
۲-رباتهاي پادار مثل سگ اسباب بازيAIBO ساخت سوني كه در شكل بالا نشان داده شد يا ربات ASIMO ساخت شركت هوندا
۳-رباتهاي پرنده
۴-رباتهاي چند گانه(هايبريد) كه تركيبي از رباتهاي بالا يا تركيب با جابجاگرها هستند
و …

مزاياي روباتها:

۱- روباتيك و اتوماسيون در بسياري از موارد مي توانند ايمني، ميزان توليد، بهره و كيفيت محصولات را افزايش دهند.
۲- روباتها مي توانند در موقعيت هاي خطرناك كار كنند و با اين كار جان هزاران انسان را نجات دهند.
۳- روباتها به راحتي محيط اطراف خود توجه ندارند و نيازهاي انساني براي آنها مفهومي ندارد. روباتها هيچگاه خسته نمي شوند.
۴- دقت روباتها خيلي بيشتر از انسانها است آنها در حد ميلي يا حتي ميكرو اينچ دقت دارند.
۵- روباتها مي توانند در يك لحظه چند كار را با هم انجام دهند ولي انسانها در يك لحظه تنها يك كار انجام مي دهند.

معايب روباتها:

۱- روباتها در موقعيتهاي اضطراري توانايي پاسخگويي مناسب ندارند كه اين مطلب مي تواند بسيار خطرناك باشد.
۲- روباتها هزينه بر هستند.
۳- قابليت هاي محدود دارند يعني فقط كاري كه براي آن ساخته شده اند را انجام مي دهند.

 

منبع

 


کلمه ربات توسط Karel Capek نویسنده نمایشنامه ( R.U.R  عقل ربات های جهانی) در سال ۱۹۲۰ ابداع شد. ریشه این کلمه، کلمه چک اسلواکی (robotnic) به معنی کارگر می‌باشد.

امروزه معمولاً کلمه ربات به معنی هر ماشین ساخت بشر که بتواند کار یا عملی که به‌طور طبیعی توسط انسان انجام می‌شود را انجام دهد، استفاده می‌شود.

رباتیک چیست ؟

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

 

رباتیک چیست

 

منظور از ربات های صنعتی چیست ؟

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

ربات‌ها از چه ساخته می‌شوند؟

ربات‌ها دارای سه قسمت اصلی هستند:

  • مغز که معمولاً یک کامپیوتر است.
  • محرک و بخش مکانیکی شامل موتور، پیستون، تسمه، چرخ‌ها، چرخ دنده‌ها و …
  • سنسور که می‌تواند از انواع بینایی، صوتی، تعیین دما، تشخیص نور، تماسی یا حرکتی باشد.با این سه قسمت، یک ربات می‌تواند با اثرپذیری و اثرگذاری در محیط کاربردی‌تر شود.

رباتیک چیست2

جنبه های رباتیک

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

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

تأثیر رباتیک در جامعه 

علم رباتیک در اصل در صنعت به‌کار می‌رود و ما تأثیر آن را در محصولاتی که هر روزه استفاده می‌کنیم، می‌بینیم. که این تأثیرات معمولاً در محصولات ارزان‌تر دیده می‌‌شود.

ربات‌ها معمولاً در مواردی استفاده می‌شوند که بتوانند کاری را بهتر از یک انسان انجام دهند یا در محیط پر خطر فعالیت نمایند مثل اکتشافات در مکان‌های خطرناک مانند آتش‌فشان‌ها که می‌توان بدون به خطر انداختن انسان‌ها انجام داد.

قوانین سه‌گانه رباتیک

ایزاک آسیموف نویسنده داستان‌های علمی تخیلی قوانین سه‌گانه رباتیک را به صورت زیر تعریف‌کرده است:
۱ـ یک ربات نباید به هستی انسان آسیب برساند یا به واسطه بی‌تحرکی، زندگی یک انسان را به مخاطره بیاندازد.
۲ـ یک ربات باید از دستوراتی که توسط انسان به او داده می‌شود، اطاعت کند؛ جز در مواردی که با قانون یکم در تضاد هستند.
۳ـ یک ربات باید تا جایی‌که با قوانین یکم و سوم در تضاد نباشد از خود محافظت کند.

مشکلات رباتیک

یک ربات مانند هر ماشین دیگری، می‌تواند بشکند یا به هر علتی خراب شود. ضمناً آن‌ها ماشین‌های قدرتمندی هستند که به ما اجازه می‌دهند کارهای معینی را کنترل کنیم.

خوشبختانه خرابی ربات‌ها بسیار نادر است زیرا سیستم رباتیک با مشخصه‌های امنیتی زیادی طراحی می‌شود که می‌تواند آسیب‌ آن‌ها را محدود ‌کند.

در این حوزه نیز مشکلاتی در رابطه با انسان‌های شرور و استفاده از ربات‌ها برای مقاصد شیطانی داریم. مطمئناً ربات‌ها می‌توانند در جنگ‌های آینده استفاده شوند. این می‌تواند هم خوب و هم بد باشد. اگر انسان‌ها اعمال خشونت آمیز را با فرستادن ماشین‌ها به جنگ یکدیگر نمایش دهند، ممکن است بهتر از فرستادن انسان‌ها به جنگ با یکدیگر باشد. ربات‌ها می‌توانند برای دفاع از یک کشور در مقابل حملات استفاده می‌شوند تا تلفات انسانی را کاهش دهد. آیا جنگ‌های آینده می‌تواند فقط یک بازی ویدئویی باشد که ربات‌ها را کنترل می‌کند؟

مزایای رباتیک

معمولاً یک ربات می‌تواند کارهایی که ما انسان‌ها می‌خواهیم انجام دهیم را ارزان‌تر انجام‌ دهد. ربات‌ها می‌توانند کارها را دقیقتر از انسان‌ها انجام دهند و روند پیشرفت در علم پزشکی و سایر علوم کاربردی را سرعت ‌بخشند. ربات‌ها به ویژه در امور تکراری و خسته کننده مانند ساختن صفحه مدار، ریختن چسب روی قطعات یدکی و… سودمند هستند. برای مثال امروزه برای بررسی وضعیت داخلی رآکتورها از ربات استفاده می شود تا تشعشعات رادیواکتیو به انسانها صدمه نزند. رباتها روز به روز هوشمندتر می شوند تا هرچه بیشتر در کارهای سخت و پر خطر به یاری انسانها بیایند.

 

رباتیک چیست

نرم افزارهای حوزه ی رباتیک

RobotWorks :  این نرم افزار میتواند واسط رباتیک و گذرگاه شبیه سازی ربات را برای نرم افزار محبوب SolidWorks ایجاد نماید. با استفاده از RobotWorks قادر خواهید بود ربات های صنعتی خود را در نرم افزار SolidWorks طراحی کرده و حرکات و اطلاعات مربوط به آنها را به صورت سه بعدی ( در نرم افزار RobotWorks ) مشاهده نمایید .

EASY-ROB : EASY-ROB  یک نرم افزار کاربردی در زمینه ی شبیه سازی بازو های رباتیک است که کاربران با استفاده از آن میتوانند ضمن مشاهده ی رفتار دقیق بازو، اطلاعات مربوط به ساخت آن را نیز از نرم افزار استخراج نمایید.

RoboCupRescue : وجود بلایای طبعیی همچون سیل، زلزله و… و خرابی هایی که بعد از رخ دادن آنها دامن گیر انسان ها میشود باعث شد، تا بشر به کاربرد ربات ها در زمینه ی امداد و نجات توجه بیشتر داشته باشد، در این بین گروه های مختلفی در زمینه ی طراحی و ساخت ربات های امداد گر شروع به فعالیت کردند یکی از این گروه ها تیم تحقیقاتی RoboCupRescue میباشد.

Microsoft Robotics Developer Studio : این نرم افزار یکی از نرم افزارهای قوی در زمینه شبیه سازی ربات ها است.شما با استفاده از این نرم افزار، می توانید به راحتی بخش مکانیک ربات خود را شبیه سازی نمایید.

Webots : نرم افزار Webots برای مدلسازی و برنامه نویسی و شبیه سازی ربات های متحرک مورد استفاده قرار می گیرد.کتابخانه های این محصول، به شما امکان می دهد که برنامه های کنترلی خودتان را به منظور ساخت ربات های واقعی بر روی این ربات ها به اجرا در بیاورید. همچنین خود نرم افزار هم این امکان رو به شما می دهد که ربات های مختلفی را در یک محیط طراحی کنید و برای هر کدام می توانید ویژگی های متفاوتی را تعریف کنید، همانند، شکل، رنگ، تکسچر، جرم، اصطکاک و غیره. همچنین شما می توانید هر ربات را با تعداد زیادی از سنسورها و محرک ها مجهز کنید. شما قادر خواهید بود که برای آنها برنامه نویسی کنید و نتایج را بر روی ربات های واقعی پیاده کنید. بیش از ۵۰۰۰ دانشگاه و مرکز تحقیقاتی از این نرم افزار استفاده می کنند.

تاثیرات شغلی رباتیک

بسیاری از مردم از اینکه ربات‌ها تعداد شغل‌ها را کاهش دهد و افراد زیادی شغل خود را از دست دهند، نگرانند. این تقریباً هرگز قضیه‌ای بر خلاف تکنولوژی جدید نیست. در حقیقت اثر پیشرفت‌ تکنولوژی مانند ربات‌ها (اتومبیل و دستگاه کپی و…) بر جوامع ، آن است که انسان بهره‌ورتر می‌شود.

آینده رباتیک

جمعیت ربات‌ها به سرعت در حال افزایش است. این رشد توسط ژاپنی‌ها که ربات‌های آن‌ها تقریباً دو برابر تعداد ربات‌های آمریکا است، هدایت شده است.
همه ارزیابی‌ها بر این نکته تأکید دارد که ربات‌ها نقش فزاینده‌ای در جوامع مدرن ایفا خواهند کرد. آن ها به انجام کارهای خطرناک، تکراری، پر هزینه و دقیق ادامه می‌دهند تا انسان‌ها را از انجام آن‌ها باز دارند.

منبع

 


منابع

۱٫fa.wikipedia.org

۲٫ www.enline.ir

۳٫http://rasekhoon.net

۴٫http://mediasoft.ir

رباتیک چیست؟ قسمت ۱
رباتیک چیست؟ قسمت ۲

۳ فروردین ۱۳۹۹/0 نظرها/توسط توسعه دهنده
http://behsanandish.com/wp-content/uploads/RPA-April-2014-2-1.jpg 256 256 توسعه دهنده https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png توسعه دهنده2020-03-22 10:00:072019-11-30 10:09:43رباتیک چیست؟ قسمت 2

الگوریتم Canny در سی پلاس پلاس قسمت ۲

پروژه ها و سورس کدهای پردازش تصویر و بینایی ماشین

مرحله ۲: پیدا کردن قدرت و جهت گرادیان لبه.

گام بعدی استفاده از Mask های Sobel برای پیدا کردن قدرت و جهت گرادیان لبه برای هر پیکسل است. ابتدا ماسک های Sobel به محدوده پیکسل ۳×۳ پیکسل فعلی در هر دو جهت x و y اعمال می شود. سپس مجموع مقدار هر ماسک ضربدر پیکسل مربوطه به ترتیب به عنوان مقادیر Gx و Gy محاسبه می شود. ریشه دوم مربع Gx به اضافه Gy مربع برابر قدرت لبه است. Tangent معکوس Gx / Gy جهت لبه را تولید می کند. سپس جهت لبه تقریب شده است به یکی از چهار مقادیر ممکن که ایجاد می کند جهت های ممکن را که  یک لبه می تواند در یک تصویر از یک شبکه پیکسل مربع باشد. این جهت لبه در edgeDir [row] [col] ذخیره می شود و قدرت گرادیان در  array gradient[row] [col] ذخیره می شود.

 

CannyEdgeWeel

هر زاویه لبه در ۱۱٫۲۵ درجه از یکی از  زاویه های ممکن به آن مقدار تغییر می کند.

 

#include "stdafx.h"
#include "tripod.h"
#include "tripodDlg.h"

#include "LVServerDefs.h"
#include "math.h"
#include <fstream>
#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

using namespace std;

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTripodDlg dialog

CTripodDlg::CTripodDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTripodDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTripodDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	//////////////// Set destination BMP to NULL first 
	m_destinationBitmapInfoHeader = NULL;

}

////////////////////// Additional generic functions

static unsigned PixelBytes(int w, int bpp)
{
    return (w * bpp + 7) / 8;
}

static unsigned DibRowSize(int w, int bpp)
{
    return (w * bpp + 31) / 32 * 4;
}

static unsigned DibRowSize(LPBITMAPINFOHEADER pbi)
{
    return DibRowSize(pbi->biWidth, pbi->biBitCount);
}

static unsigned DibRowPadding(int w, int bpp)
{
    return DibRowSize(w, bpp) - PixelBytes(w, bpp);
}

static unsigned DibRowPadding(LPBITMAPINFOHEADER pbi)
{
    return DibRowPadding(pbi->biWidth, pbi->biBitCount);
}

static unsigned DibImageSize(int w, int h, int bpp)
{
    return h * DibRowSize(w, bpp);
}

static size_t DibSize(int w, int h, int bpp)
{
    return sizeof (BITMAPINFOHEADER) + DibImageSize(w, h, bpp);
}

/////////////////////// end of generic functions


void CTripodDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTripodDlg)
	DDX_Control(pDX, IDC_PROCESSEDVIEW, m_cVideoProcessedView);
	DDX_Control(pDX, IDC_UNPROCESSEDVIEW, m_cVideoUnprocessedView);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTripodDlg, CDialog)
	//{{AFX_MSG_MAP(CTripodDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDEXIT, OnExit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTripodDlg message handlers

BOOL CTripodDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

	// For Unprocessed view videoportal (top one)
	char sRegUnprocessedView[] = "HKEY_LOCAL_MACHINE\\Software\\UnprocessedView";
	m_cVideoUnprocessedView.PrepareControl("UnprocessedView", sRegUnprocessedView, 0 );	
	m_cVideoUnprocessedView.EnableUIElements(UIELEMENT_STATUSBAR,0,TRUE);
	m_cVideoUnprocessedView.ConnectCamera2();
	m_cVideoUnprocessedView.SetEnablePreview(TRUE);

	// For binary view videoportal (bottom one)
	char sRegProcessedView[] = "HKEY_LOCAL_MACHINE\\Software\\ProcessedView";
	m_cVideoProcessedView.PrepareControl("ProcessedView", sRegProcessedView, 0 );	
	m_cVideoProcessedView.EnableUIElements(UIELEMENT_STATUSBAR,0,TRUE);
	m_cVideoProcessedView.ConnectCamera2();
	m_cVideoProcessedView.SetEnablePreview(TRUE);

	// Initialize the size of binary videoportal
	m_cVideoProcessedView.SetPreviewMaxHeight(240);
	m_cVideoProcessedView.SetPreviewMaxWidth(320);

	// Uncomment if you wish to fix the live videoportal's size
	// m_cVideoUnprocessedView.SetPreviewMaxHeight(240);
	// m_cVideoUnprocessedView.SetPreviewMaxWidth(320);

	// Find the screen coodinates of the binary videoportal
	m_cVideoProcessedView.GetWindowRect(m_rectForProcessedView);
	ScreenToClient(m_rectForProcessedView);
	allocateDib(CSize(320, 240));

	// Start grabbing frame data for Procssed videoportal (bottom one)
	m_cVideoProcessedView.StartVideoHook(0);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CTripodDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CTripodDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CTripodDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CTripodDlg::OnExit() 
{
	// TODO: Add your control notification handler code here

	// Kill live view videoportal (top one)
	m_cVideoUnprocessedView.StopVideoHook(0);
    m_cVideoUnprocessedView.DisconnectCamera();	
	
	// Kill binary view videoportal (bottom one)
	m_cVideoProcessedView.StopVideoHook(0);
    m_cVideoProcessedView.DisconnectCamera();	

	// Kill program
	DestroyWindow();	

	

}

BEGIN_EVENTSINK_MAP(CTripodDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CTripodDlg)
	ON_EVENT(CTripodDlg, IDC_PROCESSEDVIEW, 1 /* PortalNotification */, OnPortalNotificationProcessedview, VTS_I4 VTS_I4 VTS_I4 VTS_I4)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CTripodDlg::OnPortalNotificationProcessedview(long lMsg, long lParam1, long lParam2, long lParam3) 
{
	// TODO: Add your control notification handler code here
	
	// This function is called at the camera's frame rate
    
#define NOTIFICATIONMSG_VIDEOHOOK	۱۰

	// Declare some useful variables
	// QCSDKMFC.pdf (Quickcam MFC documentation) p. 103 explains the variables lParam1, lParam2, lParam3 too 
	
	LPBITMAPINFOHEADER lpBitmapInfoHeader; // Frame's info header contains info like width and height
	LPBYTE lpBitmapPixelData; // This pointer-to-long will point to the start of the frame's pixel data
    unsigned long lTimeStamp; // Time when frame was grabbed

	switch(lMsg) {
		case NOTIFICATIONMSG_VIDEOHOOK:
			{
				lpBitmapInfoHeader = (LPBITMAPINFOHEADER) lParam1; 
				lpBitmapPixelData = (LPBYTE) lParam2;
				lTimeStamp = (unsigned long) lParam3;

				grayScaleTheFrameData(lpBitmapInfoHeader, lpBitmapPixelData);
				doMyImageProcessing(lpBitmapInfoHeader); // Place where you'd add your image processing code
				displayMyResults(lpBitmapInfoHeader);

			}
			break;

		default:
			break;
	}	
}

void CTripodDlg::allocateDib(CSize sz)
{
	// Purpose: allocate information for a device independent bitmap (DIB)
	// Called from OnInitVideo

	if(m_destinationBitmapInfoHeader) {
		free(m_destinationBitmapInfoHeader);
		m_destinationBitmapInfoHeader = NULL;
	}

	if(sz.cx | sz.cy) {
		m_destinationBitmapInfoHeader = (LPBITMAPINFOHEADER)malloc(DibSize(sz.cx, sz.cy, 24));
		ASSERT(m_destinationBitmapInfoHeader);
		m_destinationBitmapInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
		m_destinationBitmapInfoHeader->biWidth = sz.cx;
		m_destinationBitmapInfoHeader->biHeight = sz.cy;
		m_destinationBitmapInfoHeader->biPlanes = 1;
		m_destinationBitmapInfoHeader->biBitCount = 24;
		m_destinationBitmapInfoHeader->biCompression = 0;
		m_destinationBitmapInfoHeader->biSizeImage = DibImageSize(sz.cx, sz.cy, 24);
		m_destinationBitmapInfoHeader->biXPelsPerMeter = 0;
		m_destinationBitmapInfoHeader->biYPelsPerMeter = 0;
		m_destinationBitmapInfoHeader->biClrImportant = 0;
		m_destinationBitmapInfoHeader->biClrUsed = 0;
	}
}

void CTripodDlg::displayMyResults(LPBITMAPINFOHEADER lpThisBitmapInfoHeader)
{
	// displayMyResults: Displays results of doMyImageProcessing() in the videoport
	// Notes: StretchDIBits stretches a device-independent bitmap to the appropriate size

	CDC				*pDC;	// Device context to display bitmap data
	
	pDC = GetDC();	
	int nOldMode = SetStretchBltMode(pDC->GetSafeHdc(),COLORONCOLOR);

	StretchDIBits( 
		pDC->GetSafeHdc(),
		m_rectForProcessedView.left,				// videoportal left-most coordinate
		m_rectForProcessedView.top,					// videoportal top-most coordinate
		m_rectForProcessedView.Width(),				// videoportal width
		m_rectForProcessedView.Height(),			// videoportal height
		۰,											// Row position to display bitmap in videoportal
		۰,											// Col position to display bitmap in videoportal
		lpThisBitmapInfoHeader->biWidth,			// m_destinationBmp's number of columns
		lpThisBitmapInfoHeader->biHeight,			// m_destinationBmp's number of rows
		m_destinationBmp,							// The bitmap to display; use the one resulting from doMyImageProcessing
		(BITMAPINFO*)m_destinationBitmapInfoHeader, // The bitmap's header info e.g. width, height, number of bits etc
		DIB_RGB_COLORS,								// Use default 24-bit color table
		SRCCOPY										// Just display
	);
 
	SetStretchBltMode(pDC->GetSafeHdc(),nOldMode);

	ReleaseDC(pDC);

	// Note: 04/24/02 - Added the following:
	// Christopher Wagner cwagner@fas.harvard.edu noticed that memory wasn't being freed

	// Recall OnPortalNotificationProcessedview, which gets called everytime
	// a frame of data arrives, performs 3 steps:
	// (۱) grayScaleTheFrameData - which mallocs m_destinationBmp
	// (۲) doMyImageProcesing
	// (۳) displayMyResults - which we're in now
	// Since we're finished with the memory we malloc'ed for m_destinationBmp
	// we should free it: 
	
	free(m_destinationBmp);

	// End of adds
}

void CTripodDlg::grayScaleTheFrameData(LPBITMAPINFOHEADER lpThisBitmapInfoHeader, LPBYTE lpThisBitmapPixelData)
{

	// grayScaleTheFrameData: Called by CTripodDlg::OnPortalNotificationBinaryview
	// Task: Read current frame pixel data and computes a grayscale version

	unsigned int	W, H;			  // Width and Height of current frame [pixels]
	BYTE            *sourceBmp;		  // Pointer to current frame of data
	unsigned int    row, col;
	unsigned long   i;
	BYTE			grayValue;

	BYTE			redValue;
	BYTE			greenValue;
	BYTE			blueValue;

    W = lpThisBitmapInfoHeader->biWidth;  // biWidth: number of columns
    H = lpThisBitmapInfoHeader->biHeight; // biHeight: number of rows

	// Store pixel data in row-column vector format
	// Recall that each pixel requires 3 bytes (red, blue and green bytes)
	// m_destinationBmp is a protected member and declared in binarizeDlg.h

	m_destinationBmp = (BYTE*)malloc(H*3*W*sizeof(BYTE));

	// Point to the current frame's pixel data
	sourceBmp = lpThisBitmapPixelData;

	for (row = 0; row < H; row++) {
		for (col = 0; col < W; col++) {

			// Recall each pixel is composed of 3 bytes
			i = (unsigned long)(row*3*W + 3*col);
        
			// The source pixel has a blue, green andred value:
			blueValue  = *(sourceBmp + i);
			greenValue = *(sourceBmp + i + 1);
			redValue   = *(sourceBmp + i + 2);

			// A standard equation for computing a grayscale value based on RGB values
			grayValue = (BYTE)(0.299*redValue + 0.587*greenValue + 0.114*blueValue);

			// The destination BMP will be a grayscale version of the source BMP
			*(m_destinationBmp + i)     = grayValue;
			*(m_destinationBmp + i + 1) = grayValue;
			*(m_destinationBmp + i + 2) = grayValue;
			
		}
	}
}


void CTripodDlg::doMyImageProcessing(LPBITMAPINFOHEADER lpThisBitmapInfoHeader)
{
	// doMyImageProcessing:  This is where you'd write your own image processing code
	// Task: Read a pixel's grayscale value and process accordingly

	unsigned int	W, H;			// Width and Height of current frame [pixels]
	unsigned int    row, col;		// Pixel's row and col positions
	unsigned long   i;				// Dummy variable for row-column vector
	int	    upperThreshold = 60;	// Gradient strength nessicary to start edge
	int		lowerThreshold = 30;	// Minimum gradient strength to continue edge
	unsigned long iOffset;			// Variable to offset row-column vector during sobel mask
	int rowOffset;					// Row offset from the current pixel
	int colOffset;					// Col offset from the current pixel
	int rowTotal = 0;				// Row position of offset pixel
	int colTotal = 0;				// Col position of offset pixel
	int Gx;							// Sum of Sobel mask products values in the x direction
	int Gy;							// Sum of Sobel mask products values in the y direction
	float thisAngle;				// Gradient direction based on Gx and Gy
	int newAngle;					// Approximation of the gradient direction
	bool edgeEnd;					// Stores whether or not the edge is at the edge of the possible image
	int GxMask[3][3];				// Sobel mask in the x direction
	int GyMask[3][3];				// Sobel mask in the y direction
	int newPixel;					// Sum pixel values for gaussian
	int gaussianMask[5][5];			// Gaussian mask

	W = lpThisBitmapInfoHeader->biWidth;  // biWidth: number of columns
    H = lpThisBitmapInfoHeader->biHeight; // biHeight: number of rows
	
	for (row = 0; row < H; row++) {
		for (col = 0; col < W; col++) {
			edgeDir[row][col] = 0;
		}
	}

	/* Declare Sobel masks */
	GxMask[0][0] = -1; GxMask[0][1] = 0; GxMask[0][2] = 1;
	GxMask[1][0] = -2; GxMask[1][1] = 0; GxMask[1][2] = 2;
	GxMask[2][0] = -1; GxMask[2][1] = 0; GxMask[2][2] = 1;
	
	GyMask[0][0] =  1; GyMask[0][1] =  2; GyMask[0][2] =  1;
	GyMask[1][0] =  0; GyMask[1][1] =  0; GyMask[1][2] =  0;
	GyMask[2][0] = -1; GyMask[2][1] = -2; GyMask[2][2] = -1;

	/* Declare Gaussian mask */
	gaussianMask[0][0] = 2;		gaussianMask[0][1] = 4;		gaussianMask[0][2] = 5;		gaussianMask[0][3] = 4;		gaussianMask[0][4] = 2;	
	gaussianMask[1][0] = 4;		gaussianMask[1][1] = 9;		gaussianMask[1][2] = 12;	gaussianMask[1][3] = 9;		gaussianMask[1][4] = 4;	
	gaussianMask[2][0] = 5;		gaussianMask[2][1] = 12;	gaussianMask[2][2] = 15;	gaussianMask[2][3] = 12;	gaussianMask[2][4] = 2;	
	gaussianMask[3][0] = 4;		gaussianMask[3][1] = 9;		gaussianMask[3][2] = 12;	gaussianMask[3][3] = 9;		gaussianMask[3][4] = 4;	
	gaussianMask[4][0] = 2;		gaussianMask[4][1] = 4;		gaussianMask[4][2] = 5;		gaussianMask[4][3] = 4;		gaussianMask[4][4] = 2;	
	

	/* Gaussian Blur */
	for (row = 2; row < H-2; row++) {
		for (col = 2; col < W-2; col++) {
			newPixel = 0;
			for (rowOffset=-2; rowOffset<=2; rowOffset++) {
				for (colOffset=-2; colOffset<=2; colOffset++) {
					rowTotal = row + rowOffset;
					colTotal = col + colOffset;
					iOffset = (unsigned long)(rowTotal*3*W + colTotal*3);
					newPixel += (*(m_destinationBmp + iOffset)) * gaussianMask[2 + rowOffset][2 + colOffset];
				}
			}
			i = (unsigned long)(row*3*W + col*3);
			*(m_destinationBmp + i) = newPixel / 159;
		}
	}

	/* Determine edge directions and gradient strengths */
	for (row = 1; row < H-1; row++) {
		for (col = 1; col < W-1; col++) {
			i = (unsigned long)(row*3*W + 3*col);
			Gx = 0;
			Gy = 0;
			/* Calculate the sum of the Sobel mask times the nine surrounding pixels in the x and y direction */
			for (rowOffset=-1; rowOffset<=1; rowOffset++) {
				for (colOffset=-1; colOffset<=1; colOffset++) {
					rowTotal = row + rowOffset;
					colTotal = col + colOffset;
					iOffset = (unsigned long)(rowTotal*3*W + colTotal*3);
					Gx = Gx + (*(m_destinationBmp + iOffset) * GxMask[rowOffset + 1][colOffset + 1]);
					Gy = Gy + (*(m_destinationBmp + iOffset) * GyMask[rowOffset + 1][colOffset + 1]);
				}
			}

			gradient[row][col] = sqrt(pow(Gx,2.0) + pow(Gy,2.0));	// Calculate gradient strength			
			thisAngle = (atan2(Gx,Gy)/3.14159) * 180.0;		// Calculate actual direction of edge
			
			/* Convert actual edge direction to approximate value */
			if ( ( (thisAngle < 22.5) && (thisAngle > -22.5) ) || (thisAngle > 157.5) || (thisAngle < -157.5) )
				newAngle = 0;
			if ( ( (thisAngle > 22.5) && (thisAngle < 67.5) ) || ( (thisAngle < -112.5) && (thisAngle > -157.5) ) )
				newAngle = 45;
			if ( ( (thisAngle > 67.5) && (thisAngle < 112.5) ) || ( (thisAngle < -67.5) && (thisAngle > -112.5) ) )
				newAngle = 90;
			if ( ( (thisAngle > 112.5) && (thisAngle < 157.5) ) || ( (thisAngle < -22.5) && (thisAngle > -67.5) ) )
				newAngle = 135;
				
			edgeDir[row][col] = newAngle;		// Store the approximate edge direction of each pixel in one array
		}
	}

	/* Trace along all the edges in the image */
	for (row = 1; row < H - 1; row++) {
		for (col = 1; col < W - 1; col++) {
			edgeEnd = false;
			if (gradient[row][col] > upperThreshold) {		// Check to see if current pixel has a high enough gradient strength to be part of an edge
				/* Switch based on current pixel's edge direction */
				switch (edgeDir[row][col]){		
					case 0:
						findEdge(0, 1, row, col, 0, lowerThreshold);
						break;
					case 45:
						findEdge(1, 1, row, col, 45, lowerThreshold);
						break;
					case 90:
						findEdge(1, 0, row, col, 90, lowerThreshold);
						break;
					case 135:
						findEdge(1, -1, row, col, 135, lowerThreshold);
						break;
					default :
						i = (unsigned long)(row*3*W + 3*col);
						*(m_destinationBmp + i) = 
						*(m_destinationBmp + i + 1) = 
						*(m_destinationBmp + i + 2) = 0;
						break;
					}
				}
			else {
				i = (unsigned long)(row*3*W + 3*col);
					*(m_destinationBmp + i) = 
					*(m_destinationBmp + i + 1) = 
					*(m_destinationBmp + i + 2) = 0;
			}	
		}
	}
	
	/* Suppress any pixels not changed by the edge tracing */
	for (row = 0; row < H; row++) {
		for (col = 0; col < W; col++) {	
			// Recall each pixel is composed of 3 bytes
			i = (unsigned long)(row*3*W + 3*col);
			// If a pixel's grayValue is not black or white make it black
			if( ((*(m_destinationBmp + i) != 255) && (*(m_destinationBmp + i) != 0)) || ((*(m_destinationBmp + i + 1) != 255) && (*(m_destinationBmp + i + 1) != 0)) || ((*(m_destinationBmp + i + 2) != 255) && (*(m_destinationBmp + i + 2) != 0)) ) 
				*(m_destinationBmp + i) = 
				*(m_destinationBmp + i + 1) = 
				*(m_destinationBmp + i + 2) = 0; // Make pixel black
		}
	}

	/* Non-maximum Suppression */
	for (row = 1; row < H - 1; row++) {
		for (col = 1; col < W - 1; col++) {
			i = (unsigned long)(row*3*W + 3*col);
			if (*(m_destinationBmp + i) == 255) {		// Check to see if current pixel is an edge
				/* Switch based on current pixel's edge direction */
				switch (edgeDir[row][col]) {		
					case 0:
						suppressNonMax( 1, 0, row, col, 0, lowerThreshold);
						break;
					case 45:
						suppressNonMax( 1, -1, row, col, 45, lowerThreshold);
						break;
					case 90:
						suppressNonMax( 0, 1, row, col, 90, lowerThreshold);
						break;
					case 135:
						suppressNonMax( 1, 1, row, col, 135, lowerThreshold);
						break;
					default :
						break;
				}
			}	
		}
	}
	
}

void CTripodDlg::findEdge(int rowShift, int colShift, int row, int col, int dir, int lowerThreshold)
{
	int W = 320;
	int H = 240;
	int newRow;
	int newCol;
	unsigned long i;
	bool edgeEnd = false;

	/* Find the row and column values for the next possible pixel on the edge */
	if (colShift < 0) {
		if (col > 0)
			newCol = col + colShift;
		else
			edgeEnd = true;
	} else if (col < W - 1) {
		newCol = col + colShift;
	} else
		edgeEnd = true;		// If the next pixel would be off image, don't do the while loop
	if (rowShift < 0) {
		if (row > 0)
			newRow = row + rowShift;
		else
			edgeEnd = true;
	} else if (row < H - 1) {
		newRow = row + rowShift;
	} else
		edgeEnd = true;	
		
	/* Determine edge directions and gradient strengths */
	while ( (edgeDir[newRow][newCol]==dir) && !edgeEnd && (gradient[newRow][newCol] > lowerThreshold) ) {
		/* Set the new pixel as white to show it is an edge */
		i = (unsigned long)(newRow*3*W + 3*newCol);
		*(m_destinationBmp + i) =
		*(m_destinationBmp + i + 1) =
		*(m_destinationBmp + i + 2) = 255;
		if (colShift < 0) {
			if (newCol > 0)
				newCol = newCol + colShift;
			else
				edgeEnd = true;	
		} else if (newCol < W - 1) {
			newCol = newCol + colShift;
		} else
			edgeEnd = true;	
		if (rowShift < 0) {
			if (newRow > 0)
				newRow = newRow + rowShift;
			else
				edgeEnd = true;
		} else if (newRow < H - 1) {
			newRow = newRow + rowShift;
		} else
			edgeEnd = true;	
	}	
}

void CTripodDlg::suppressNonMax(int rowShift, int colShift, int row, int col, int dir, int lowerThreshold)
{
	int W = 320;
	int H = 240;
	int newRow = 0;
	int newCol = 0;
	unsigned long i;
	bool edgeEnd = false;
	float nonMax[320][3];			// Temporarily stores gradients and positions of pixels in parallel edges
	int pixelCount = 0;					// Stores the number of pixels in parallel edges
	int count;						// A for loop counter
	int max[3];						// Maximum point in a wide edge
	
	if (colShift < 0) {
		if (col > 0)
			newCol = col + colShift;
		else
			edgeEnd = true;
	} else if (col < W - 1) {
		newCol = col + colShift;
	} else
		edgeEnd = true;		// If the next pixel would be off image, don't do the while loop
	if (rowShift < 0) {
		if (row > 0)
			newRow = row + rowShift;
		else
			edgeEnd = true;
	} else if (row < H - 1) {
		newRow = row + rowShift;
	} else
		edgeEnd = true;	
	i = (unsigned long)(newRow*3*W + 3*newCol);
	/* Find non-maximum parallel edges tracing up */
	while ((edgeDir[newRow][newCol] == dir) && !edgeEnd && (*(m_destinationBmp + i) == 255)) {
		if (colShift < 0) {
			if (newCol > 0)
				newCol = newCol + colShift;
			else
				edgeEnd = true;	
		} else if (newCol < W - 1) {
			newCol = newCol + colShift;
		} else
			edgeEnd = true;	
		if (rowShift < 0) {
			if (newRow > 0)
				newRow = newRow + rowShift;
			else
				edgeEnd = true;
		} else if (newRow < H - 1) {
			newRow = newRow + rowShift;
		} else
			edgeEnd = true;	
		nonMax[pixelCount][0] = newRow;
		nonMax[pixelCount][1] = newCol;
		nonMax[pixelCount][2] = gradient[newRow][newCol];
		pixelCount++;
		i = (unsigned long)(newRow*3*W + 3*newCol);
	}

	/* Find non-maximum parallel edges tracing down */
	edgeEnd = false;
	colShift *= -1;
	rowShift *= -1;
	if (colShift < 0) {
		if (col > 0)
			newCol = col + colShift;
		else
			edgeEnd = true;
	} else if (col < W - 1) {
		newCol = col + colShift;
	} else
		edgeEnd = true;	
	if (rowShift < 0) {
		if (row > 0)
			newRow = row + rowShift;
		else
			edgeEnd = true;
	} else if (row < H - 1) {
		newRow = row + rowShift;
	} else
		edgeEnd = true;	
	i = (unsigned long)(newRow*3*W + 3*newCol);
	while ((edgeDir[newRow][newCol] == dir) && !edgeEnd && (*(m_destinationBmp + i) == 255)) {
		if (colShift < 0) {
			if (newCol > 0)
				newCol = newCol + colShift;
			else
				edgeEnd = true;	
		} else if (newCol < W - 1) {
			newCol = newCol + colShift;
		} else
			edgeEnd = true;	
		if (rowShift < 0) {
			if (newRow > 0)
				newRow = newRow + rowShift;
			else
				edgeEnd = true;
		} else if (newRow < H - 1) {
			newRow = newRow + rowShift;
		} else
			edgeEnd = true;	
		nonMax[pixelCount][0] = newRow;
		nonMax[pixelCount][1] = newCol;
		nonMax[pixelCount][2] = gradient[newRow][newCol];
		pixelCount++;
		i = (unsigned long)(newRow*3*W + 3*newCol);
	}

	/* Suppress non-maximum edges */
	max[0] = 0;
	max[1] = 0;
	max[2] = 0;
	for (count = 0; count < pixelCount; count++) {
		if (nonMax[count][2] > max[2]) {
			max[0] = nonMax[count][0];
			max[1] = nonMax[count][1];
			max[2] = nonMax[count][2];
		}
	}
	for (count = 0; count < pixelCount; count++) {
		i = (unsigned long)(nonMax[count][0]*3*W + 3*nonMax[count][1]);
		*(m_destinationBmp + i) = 
		*(m_destinationBmp + i + 1) = 
		*(m_destinationBmp + i + 2) = 0;
	}
}

الگوریتم Canny در سی پلاس پلاس قسمت ۱
الگوریتم Canny در سی پلاس پلاس قسمت ۲
الگوریتم Canny در سی پلاس پلاس قسمت ۳
الگوریتم Canny در سی پلاس پلاس قسمت ۴

۲۸ اسفند ۱۳۹۸/0 نظرها/توسط توسعه دهنده
https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png 0 0 توسعه دهنده https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png توسعه دهنده2020-03-18 10:00:332019-11-30 10:07:11الگوریتم Canny در سی پلاس پلاس قسمت 2

سیستم توصیه گر (Recommender System) قسمت ۱

آموزش های عمومی هوش مصنوعی

سامانه توصیه گر

سیستم توصیه گر (به انگلیسی: Recommender System) یا سامانه پیشنهادگر (واژه سیستم یا سامانه گاهی با پلتفرم یا موتور جایگزین می‌شود)، با تحلیل رفتار کاربر خود، اقدام به پیشنهاد مناسب‌ترین اقلام (داده، اطلاعات، کالا و…)می‌نماید. این سیستم رویکردی است که برای مواجهه با مشکلات ناشی از حجم فراوان و رو به رشد اطلاعات ارائه شده‌است و به کاربر خود کمک می‌کند تا در میان حجم عظیم اطلاعات سریع‌تر به هدف خود نزدیک شوند. برخی سامانه پیشنهادگر را معادل پالایش گروهی (به انگلیسی: Collaborative filtering) می‌دانند.

مقدمه

پیش بینی می‌شد که تا اوایل سال ۲۰۰۷ میلادی در سایت دانشنامه اینترنتی ویکی‌پدیا چیزی حدود ۵٫۱ میلیون مقاله به ثبت رسیده باشد یا سایت مدیریت و به اشتراک‌گذاری تصاویر فلیکر بالغ بر ۲۵۰ میلیون تصویر را در خود جای دهد. از این رو، می‌توان گفت که ما در میان حجم عظیمی از داده و اطلاعات قرار گرفته‌ایم که بدون راهنمایی و ناوبری درست ممکن است انتخاب‌هایی غلط یا غیر بهینه از میان آن‌ها داشته باشیم. سیستم‌های توصیه‌گر سیستم‌های تأثیرگذار در راهنمایی و هدایت کاربر، در میان حجم عظیمی از انتخاب‌های ممکن، برای رسیدن به گزینه مفید و مورد علاقه وی هستند، به گونه‌ای که این فرایند برای همان کاربر شخصی‌سازی شده باشد.

تعاریف متفاوتی برای سیستم‌های توصیه‌گر ارائه شده‌است. از آن جمله، تعریف کلی‌نگر و خلاصه آقای Ting-peng liang در سال ۲۰۰۷ است که RS را زیرمجموعه‌ای از DSSها می‌داند و آن‌ها راسیستم‌های اطلاعاتی تعریف می‌کند که، توانایی تحلیل رفتارهای گذشته و ارائه توصیه‌هایی برای مسائل جاری را دارا هستند. به زبان ساده‌تر در سیستم‌های توصیه‌گر تلاش بر این است تا با حدس زدن شیوه تفکر کاربر (به کمک اطلاعاتی که از نحوه رفتار وی یا کاربران مشابه وی و نظرات آن‌ها داریم) به وی مناسب‌ترین و نزدیک‌ترین کالا به سلیقه او را شناسایی و پیشنهاد کنیم. این سیستم‌ها در حقیقت همان فرایندی که ما در زندگی روزمره خود به کار می‌بریم و طی آن تلاش می‌کنیم تا افرادی با سلایق نزدیک به خود را پیدا کرده و از آنها در مورد انتخاب‌هایمان نظر بخواهیم. توصیه‌هایی که از سوی سیستم‌های توصیه‌گر ارائه می‌شوند به طور کلی می‌توانند دو نتیجه دربرداشته باشند:

  • کاربر را در اخذ تصمیمی یاری می‌کنند (که مثلاً از میان چندین گزینه پیش رو کدام بهتر است و آن را انتخاب کند و …).
  • موجب افزایش آگاهی کاربر، در زمینه مورد علاقه وی می‌شود (مثلاً در حین ارائه توصیه به کاربر موجب می‌شود تا وی با اقلام و اشیاء جدیدی را که قبلاً آنها را نمی‌شناخته، آشنا شود).

سیستم‌های توصیه‌گر برای هر دو طرف یک تعامل (تجاری یا غیرتجاری)، مفید هستند و مزایایی را فراهم می‌آورد. برای نمونه در یک تعامل تجاری، مشتری‌ها از این جهت که عمل جستجو در میان حجم زیاد اطلاعات برای آن‌ها تسهیل و تسریع می‌شود، استفاده از سیستم‌های توصیه‌گر را مفید می‌دانند؛ فروشندگان به کمک این سیستم‌ها می‌توانند رضایت مشتریان را بالا برده و نیز فروش خود را افزایش دهد.

مزایا و پیشرفت‌ها

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

تاریخچه

تقریباً در اواسط دهه ۹۰ بود که مطالعه بر روی سیستم‌های توصیه‌گر به عنوان یک شاخه مستقل در تحقیقات مطرح شد و علت این توجه خاص، ابراز تمایل محققین، برای حل مشکل روش‌های توصیه‌گری بود که در رویکرد اولیه به مسئله جستجو در حجم فراوان اطلاعات، از آنها استفاده می‌شد.

ظرفیت رایانه‌ها در فراهم آوردن توصیه‌ها تقریباً از همان اوایل تاریخ‌چه رایانه‌ها شناخته شد. گراندی، یک کتابدار کامپیوتری گامی اولیه به سمت سامانه‌های توصیه‌گر خودکار بود. این کتابدار یک توصیه‌گر نسبتاً ساده و اولیه بود که کاربران را به قالب‌هایی بر اساس مصاحبه کوتاه با استفاده از اطلاعات مستقیم‌کدشده(hard-coded) دربارهٔ سلایق کتاب قالب‌های مختلف گروه‌بندی می‌کرد تا توصیه‌ها را تولید کند، ولی این کار ورود اولیه مهم به فضای سامانه‌های توصیه‌گر قلمداد می‌شود.

در اوایل دهه نود میلادی، تکنیک پالایش مشارکتی به عنوان راه‌حلی برای مدیریت فضای اطلاعات بسیار زیاد آنلاین بوجود آمدند. تپستری Tapestry یک سامانه پالایش مشارکتی دستی بود. این سامانه به کاربر اجازه انجام پرس‌وجو برای آیتم‌های موجود در یک حوزه اطلاعاتی مانند ایمیل بر اساس عقاید و اقدامات دیگر کاربران می‌داد (همه ایمیل‌هایی که از طرف John فوروارد شده‌اند را به من نشان بده). این‌کار مستلزم تلاش از طرف کاربرانش بود ولی به آنها اجازه کنترل واکنش‌های خوانندگان قبلی یک قسمت از مکاتبات را می‌داد تا میزان ارتباطش با آنها را تعیین کند.

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

طی این دوره، سامانه‌های توصیه‌گر و پالایش مشارکتی تبدیل به موضوعی مورد علاقه در بین محققین حوزه‌های تعاملات انسان-رایانه، یادگیری ماشین و بازیابی اطلاعات شدند. این علاقه منجر به ایجاد تعدادی سامانه توصیه‌گر برای زمینه‌های مختلفی شد از جمله Ringo برای موسیقی، توصیه‌گر ویدیو BellCore برای فیلم‌ها و Jester برای لطیفه‌ها شد. خارج از دنیای رایانه، حوزه بازاریابی توصیه‌ها را برای توانایی‌شان در افزایش فروش و بهبود تجربه مشتریان آنالیز کرده است.

در اواخر دهه نود میلادی، پیاده‌سازی‌های تجاری فناوری توصیه‌گرها شروع به ظهور کردند. شاید معروف‌ترین کاربرد فناوری‌های سامانه‌های توصیه گر وب‌سایت Amazon.com باشد. بر اساس تاریخ‌چه خرید، تاریخ‌چه بازدید و آیتمی که کاربر درحال مشاهده آن است آنها به کاربر آیتم‌هایی را توصیه می‌کنند تا برای خرید درنظر بگیرد.

از زمان بکارگیری توسط آمازون، فناوری توصیه، اغلب بر اساس پالایش مشارکتی، در بسیاری از سامانه‌های تجارت الکترونیک و آنلاین تعبیه شده است. یک انگیزه قابل ملاحظه برای انجام اینکار افزایش حجم فروش است، مشتریان ممکن است کالایی را بخرند اگر آن کالا به آنها پیشنهاد شود ولی درغیراینصورت ممکن است آن کالا را نخرند. شرکت‌های بسیاری مانند NetPerceptions و Strands بخاطر فراهم کردن فناوری و خدمات توصیه به خرده‌فروشان آنلاین بوجود آمده‌اند.

جعبه ابزار تکنیک‌های توصیه گر به چیزی بیش از پالایش مشارکتی گسترش یافته‌اند و شامل رویکردهای محتوامحور(Content-Based) بر اساس متدهای بازیابی اطلاعات، استنتاج بیزی (Bayesian Inference) و استدلال مورد محور (Case-Based Reasonong) می‌باشد. این متدها بجای یا درعوض الگوهای نمره دهی کاربران، محتوا یا ویژگی‌های اصلی آیتم‌هایی که قرار است توصیه شود را درنظر می‌گیرند. با به بلوغ رسیدن استراتژی‌های توصیه مختلف، سامانه‌های توصیه‌گر ترکیبی (Hybrid Recommender Systems) نیز ظهور یافته‌اند و الگوریتم‌های مختلفی را در سیستم‌های مرکبی ترکیب کرده‌اند که بر اساس قدرت الگوریتم‌های تشکیل‌دهنده‌شان ایجاد شده‌اند. البته در کنار رویکردهای محتوا محور، پالایش مشارکتی، هم روش تکی و هم ترکیب‌شده‌اش به عنوان روشی مؤثر همچنان مطرح هستند.

زمانی که Netflix جایزه Netflix Prize را در سال ۲۰۰۶ به منظور بهبود بخشیدن وضعیت توصیه‌های فیلمش برقرار کرد، تحقیق بر روی الگوریتم‌های سامانه‌های توصیه‌گر توجه بسیاری را به خودش جلب کرد. هدف این رقابت ساختن یک الگوریتم توصیه‌گری بود که بتواند الگوریتم CineMatch که متعلق به خود Netflix بود را با ۱۰٪ بهبود در آزمایشات آفلاین شکست دهد. این امر موجب ایجاد خروشی از اقدامات شد، هم در بین محیط آکادمیک و هم در بین سایر علاقمندان. جایزه یک میلیون دلاری ارزشی را که فروشندگان برای دقت توصیه‌ها قائل هستند نشان می‌دهد[۱].

کاربردها

سیستم‌های توصیه‌گر کاربردهای فراوانی دارند که برخی از زمینه‌های کاربردی آن به شرح زیر است:

  • تجارت الکترونیک: برای توصیه محصولات و خدمات مختلف.
  • اینترانت‌های بنگاهی: برای پیدا کردن افراد خبره در یک زمینه خاص یا افرادی که در رویارویی با شرایط مشابه، تجاربی کسب کرده و راه حل‌هایی یافته‌اند (بیشتر داخل یک سازمان کاربرد دارد).
  • کتابخانه دیجیتال: پیدا کردن کتاب، مقاله و …
  • کاربردهای پزشکی: انتخاب پزشک متناسب با شرایط (مکان، نوع بیماری، زمان و …) بیمار، انتخاب دارو و …
  • مدیریت ارتباط با مشتری CRM: برای ارائه راهکارهایی برای حل مشکلات تولیدکننده و مصرف‌کننده در زنجیره تأمین.

مقایسه سامانه‌های توصیه گر و سامانه‌های تصمیم‌یار کلاسیک

اگر چه شباهت‌های بسیاری بین این دو سیستم وجود دارد اما بین آن‌ها تفاوت‌هایی هم هست، که مهم‌ترین این تفاوت‌ها، این است که در DSSها کاربر نهایی مدیران ارشد یا میانی یک سازمان هستند، در حالی که در سیستم‌های توصیه‌گر کاربری سیستم به سطح خاصی محدود نمی‌شود و سیستم مورد استفاده عام است. اما عمده شباهت این دو سیستم نیز بر این اساس که سیستم‌های توصیه‌گر، جدای از دیدگاه سطوح کاربری و به لحاظ فنی، به نوعی زیر مجموعه DSS به شمار می‌روند. هر دوی آنها کاربر خود را در اخذ تصمیم، یاری می‌کنند و هر دو سیستم‌های اطلاعاتی‌ای هستند که دارای پایگاه دانش، پایگاه داده، رابط کاربری و … می‌باشند.

تعاریف و اصطلاحات عمده

لازم است برای درک مفهوم سیستم توصیه‌گر، مفاهیم چهارگانه و ابتدایی زیر را بررسی کنیم.

  • در سیستم‌های توصیه گر به کاربری که توصیه جاری در سیستم، برای وی در حال پردازش و آماده شدن است، کاربر فعال یا کاربر هدف می‌گویند.
  • الگوریتم‌های به کار رفته در این سیستم‌ها، از ماتریسی به نام ماتریس رتبه‌ها استفاده می‌کنند؛ اصطلاحات رایج برای این ماتریس Rating Database و Preference Database نیز هستند.
  • از فعل مصرف کردن در سیستم‌های توصیه‌گر، زمانی استفاده می‌کنند که کاربر توصیه ارائه شده را می‌پذیرد. به عبارتی وقتی کاربری پیشنهادی را که توسط سیستم به وی شده می‌پذیرد، می‌گوییم کاربر آن پیشنهاد را مصرف کرده، این پذیرش می‌تواند به شکل‌های مختلفی باشد، مثلاً کاربر، کتاب پیشنهادی را می‌خرد، سایت پیشنهادی را مرور می‌کند یا به شرکت خدماتی ای که به او پیشنهاد شده مراجعه می‌کند. ساختار ماتریس رتبه‌ها بدین گونه‌است که در آن، هر سطر ماتریس نمایانگر یک کاربر و هر ستون آن معرف کالایی (شئای) خاص است.

حال با مفهوم تابع سودمندی آشنا خواهیم شد که قصد داریم به کمک آن یک مدل کلی ریاضی از سیستم‌های توصیه‌گر را نیز ارائه دهیم. در واقع یک سیستم توصیه‌گر را می‌توان با این نگاشت همسان دانست و مدل کرد: {\displaystyle u:C*S->R}{\displaystyle u:C*S->R}

فرض کنید C مجموعه تمامی کاربران و S مجموعه اقلام در دسترس باشند. تابعی را که میزان مفید و متناسب بودن کالای S برای کاربر C را محاسبه می‌کند با u نشان می‌دهیم، که در آن R مجموعه‌ای است کاملاً مرتب (براساس میزان اهمیت). هرکدام از عناصر S را می‌توان با مجموعه‌ای از خصوصیات، مشخص کرد. برای مثال، محصولی مثل فیلم را می‌توان با مشخصه‌هایی چون عنوان فیلم، کارگردان، طول زمانی فیلم، تاریخ تولید و … ثبت کرد. همچنین عناصر مجموعه C را نیز می‌توان بر اساس ویژگی‌های مثل سن، جنسیت و … ثبت کرد. (باید توجه داشت که u روی تمام فضای مجموعه آغازین S×C تعریف شده نیست؛ از این رو باید برون‌یابی شود)

 

سیستم توصیه گر (Recommender System) قسمت ۱
سیستم توصیه گر (Recommender System) قسمت ۲
سیستم توصیه گر (Recommender System) قسمت ۳

۱۲ بهمن ۱۳۹۸/0 نظرها/توسط م. دلیری
http://behsanandish.com/wp-content/uploads/photo_2016-08-18_11-05-51.jpg 256 256 م. دلیری https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png م. دلیری2020-02-01 10:00:322019-11-30 09:41:42سیستم توصیه گر (Recommender System) قسمت 1

سیستم خبره قسمت ۱

آموزش های عمومی هوش مصنوعی

سیستم خبره

سامانه‌های خِبره یا سیستم های خبره به دسته‌ای خاص از نرم‌افزارهای رایانه‌ای اطلاق می‌شود که در راستای کمک به کاردانان و متخصّصان انسانی یا جایگزینی جزئی آنان در زمینه‌های محدود تخصّصی تلاش دارند. اینگونه سامانه‌ها، در واقع، نمونه‌های آغازین و ساده‌تری از فناوری پیشرفته‌تر سیستم های دانش-بنیان به شمار می‌آیند.

این سیستم ها معمولاً اطلاعات را به شکل واقعیت ها و قواعد در دادگانی به نام پایگاه دانش به شکل ساختار مند ذخیره نموده، و سپس با بهره‌گیری از روشهایی خاص استنتاج از این داده‌ها نتایج مورد نیاز حاصل می‌شود.

 نمونه‌ای از یک کامپیوتر لیسپ با کیبورد اسپیس کادت

 نمونه‌ای از یک کامپیوتر لیسپ با کیبورد اسپیس کادت

پیشگفتار

در میان اهل فن و صاحبان اندیشه، استدلال تعاریف و تفاسیر گوناگونی دارد. در نگاهی کلی، بهره گرفتن از دلیل و برهان برای رسیدن به یک نتیجه از فرضیاتی منطقی با بکارگیری روش‌های شناخته شده، تعریفی از استدلال تلقی می‌شود؛ تعریفی که البته با دیدگاه‌های فلسفی و گاه آرمانگرایانه از استدلال تفاوت دارد. با این حال موضوع مهم و بنیادین در اینجا بحث در چیستی و چرایی این دیدگاه‌ها نیست، بلکه در مورد “چگونگی طراحی دستگاه‌های استدلال گر”، با هر تعریفی، برای رسیدن به مجموعه‌ای از تصمیمات منطقی با استفاده از مفروضات یا به طور دقیق‌تر دانشی است که در اختیار آن‌ها قرار می‌گیرد. سیستم های خبره(expert systems) اساساً برای چنین هدفی طراحی می‌شوند. در حقیقت به واسطه الگوبرداری این سیستم ها از نظام منطق و استدلال انسان و نیز یکسان بودن منابع دانش مورد استفاده آن‌ها، پیامد کار یک سیستم خبره می‌تواند تصمیماتی باشد که در حوزه‌ها و قلمروهای گوناگون قابل استفاده، مورد اطمینان و تأثیرگذار هستند. بسیاری بر این باورند که سیستم های خبره بیشترین پیشرفت را در “هوش مصنوعی” به وجود آورده‌اند.

تاریخچه

تا ابتدای دههٔ ۱۹۸۰ (م) کار چندانی در زمینهٔ ساخت و ایجاد سیستم های خِبره توسط پژوهش گران هوش مصنوعی صورت نگرفته بود. از آن زمان به بعد، کارهای زیادی در این راستا و در دو حوزهٔ متفاوت ولی مرتبط سیستم های کوچک خبره و نیز سیستم های بزرگ خبره انجام شده است.

در دهه ۱۹۷۰، ادوارد فیگن بام در دانشگاه استانفورد به دنبال کشف روش حل مسئله ای بود که خیلی کلی و همه منظوره نباشد. پژوهشگران دریافتند که یک متخصص معمولاً دارای شماری رموز و فوت و فن خاص برای کار خود می‌باشد و در واقع از مجموعه‌ای از شگردهای سودمند و قواعد سرانگشتی در کار خود بهره می‌برد، این یافته مقدمه پیدایش سیستم خبره بود. سیستم خبره با برگرفتن این قواعد سر انگشتی از متخصصین و به تعبیری با تبدیل فرایند استدلال و تصمیم‌گیری متخصصین به برنامه‌های رایانه‌ای می‌تواند به عنوان ابزار راهنمای تصمیم‌گیری در اختیار غیرمتخصص و حتی متخصصین کم تجربه قرار گیرد.

هوش مصنوعی: هوش مصنوعی روشی است در جهت هوشمند کردن رایانه تا قادر باشد در هر لحظه تصمیم‌گیری کرده و اقدام به بررسی یک مسئله نماید. هوش مصنوعی، رایانه را قادر به اندیشیدن می‌کند و روش آموختن انسان را رونوشت برداری می‌نماید؛ بنابراین اقدام به جذب اطلاعات جدید جهت بکارگیری در مراحل بعدی می‌پردازد.

مغز انسان به بخش‌هایی تقسیم شده است که هر بخش وظیفه خاص خود را جدا از بقیه انجام می‌دهد. آشفتگی در کار یک بخش تأثیری در دیگر بخشهای مغز نخواهد گذاشت. در برنامه‌های هوش مصنوعی نیز این مسئله رعایت می‌شود درحالی که در برنامه‌های غیر هوش مصنوعی مثل C یا Pascal تغییر در برنامه روی سایر قسمت‌های برنامه و اطلاعات تأثیر دارد.

مباحث کاربردی و مهم در تحقق یک سیستم هوش مصنوعی:

    • سیستم های خبره (Expert Systems)
    • شبکه‌های عصبی (Neural Network)
    • الگوریتم‌های ژنتیک (Genetic Algorithms)
    • سامانه‌های منطق فازی (Fuzzy Logic Systems)

حوزه‌های کاربرد

سیستم های خبره در زمینه‌های بسیار متنوعی کاربرد یافته‌اند که برخی از این زمینه‌ها عبارتند از پزشکی، حسابداری، کنترل فرایندها، منابع انسانی، خدمات مالی، و GIS. حسابداری، تجزیه و تحلیلهای مالی پزشکی (تشخیص بیماری)، آنژیوگرافی، باستان‌شناسی، تولید ویفرهای سیلیکونی و انواع خاصی از پرتونگاری در زمینه‌های مختلف دیگری نیز سیستمهای خبره پدید آمده‌اند همانند: مشاوره حقوقی، مشاوره برای انتخاب بهترین معماری یا ترکیب بندی سامانه کامپیوتری، مشاوره مهندسی ساختمان و غیره.

در هر یک از این زمینه‌ها می‌توان کارهایی از نوع راهنمایی، پردازش، دسته‌بندی، مشاوره، طراحی، تشخیص، کاوش، پیش بینی، ایجاد مفاهیم، شناسایی، توجیه، یادگیری، مدیریت، واپاشی، برنامه‌ریزی، زمان‌بندی و آزمایش را با مددجویی از سامانه‌های تجربی با سرعت و آسانی بیشتری به انجام رسانید.

سیستم های خبره یا به عنوان جایگزین فرد متخصص یا به عنوان کمک به وی استفاده می‌شوند.

کاربرد سیستم های خبره در خدمات کتابداری و اطلاع‌رسانی

سیستم های خبره این امکان را در اختیار می‌گذارد تا بتوان دانش موجود در سطح جامعه را به صورت گسترده‌تر و کم هزینه تری اشاعه داد. این موضوع یعنی اشاعه دانش برای عموم مردم یکی از بنیادی‌ترین و اصلی‌ترین وظایف و رسالتهای حوزه کتابداری است .
مثلاً از طریق واسطهای هوشمند جستجوی اطلاعات می‌توان مهارتهای جستجوی پیشرفته را که اغلب خاص متخصصان با تجربه است در میان طیف وسیعی از کاربران در دسترس قرار دهد. سرعت استدلال یا حل مسائل در نظام‌های خبره می‌تواند منجر به ارائه خدمات کاراتر و سریع تر در برخی فعالیتهای کتابداری شود و انعطاف‌پذیری بیشتری را در پاسخگویی به نیازهای مخاطبان به وجود آورد.

کاربرد سیستم های خبره و هوشمند را در حوزه‌های نمایه سازی، چکیده نویسی، طراحی و تولید اصطلاح‌نامه‌ها، فهرست نویسی، بازیابی متن فارغ از منطق بولی، بازیابی متون مبتنی بر منطق بولی، تجزیه و تحلیل خودکار محتوا و ارائه دانش، مدیریت و دسترسی به محتوی پایگاه‌های رابطه‌ای، اسناد هوشمند، پردازش پایگاه‌های اطلاعاتی دانسته‌اند.

کاربرد سیستم های خبره در حسابداری و امور مالی

یکی از پر رونق‌ترین زمینه‌های کاربرد سیستم های خبره، حوزه و تجزیه و تحلیلهای مالی است. یکی از مناسب‌ترین زمینه‌های کاربرد این سیستم ها حوزه حسابداری و امور مالی است. امروزه انواع زیادی از سیستم های خبره برای کاربردهای گوناگون در این شاخه از دانش بشری ساخته شده است که در مورد استفاده گروه‌های مختلفی از تصمیم گیرندگان مانند مدیران شرکتها و سازمانها، حسابداران، تحلیلگران مالی، کارشناسان مالیاتی و بالاخره عامه مردم قرار می‌گیرد حتی متخصصین و کارشناسان حوزه‌های مختلف دانش حسابداری و مالی از این نرم‌افزارهای پر جاذبه به عنوان وسیله‌ای برای یافتن «حدس دوم» و اطمینان بیشتر نسبت به یافته‌ها و داوری‌های شخصی خود استفاده می‌کنند.

کاربردهای مختلفی از سیستم های خبره در سه زمینه حسابداری، حسابداری مدیریت و امور مالیاتی به شرح ذیل می‌باشد:

    • حسابرسی :ارزیابی ریسک – تهیه برنامه حسابرسی – فراهم آوردن کمکهای فنی – کشف تقلبات و جلوگیری از آنها
    • حسابداری مدیریت :قیمت گذاری محصولات و خدمات – تعیین بهای تمام شده – طراحی سیستمهای حسابداری – بودجه بندی سرمایه‌ای – انتخاب روش حسابداری – ارزیابی اعتبار – ایجاد و برقراری واپاشی (کنترل)
    • امور مالیاتی : توصیه‌های مالیاتی – محاسبه مابه التفاوتهای مالیاتی – برنامه‌ریزی مالی شخصی.

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

انواع سیستم های خبره تحلیل مالی

از آنجا که در داوریهای مختلف مالی عملاً هر چهار مرحله فرایند تصمیم‌گیری یعنی گردآوری داده‌ها، انجام واکاوی، کسب بینش مشخص راجع به موضع و بالاخره تصمیم‌گیری دخالت دارد سیستم های خبره مرتبط با موضوع تحلیل مالی نیز بر پایهٔ نوع کمکی که به مراحل مختلف فرایند تصمیم‌گیری می‌کنند به سه قلمرو تقسیم می‌شوند.

این سه قلمرو عبارتند از:

    1. کمک به کسب بینش یا بینش آفرین Insight facilitaing
    2. آسان سازی تصمیم‌گیری Decision facilitating
    3. تصمیم سازی Decision Making

سیستم های خبره بینش آفرین

در این نوع سیستم ها، هدف اصلی ارائه پردازش‌های مربوط به کمک واکاوی نسبتها و نمودار هاست این نسبت‌ها و نمودارها برای دست اندرکاران تحلیل مالی در ایجاد بینش دقیق تری در مورد وضع مالی و چشم‌انداز آتی یک مؤسسه، یعنی سودمند است با چنین هدفی عملاً مراحل اول و دوم از فرایند چهار مرحله‌ای تصمیم‌گیری به کمک این سیستم ها انجام می‌شود این نرم‌افزارها را به این دلیل بینش آفرین می‌خوانیم که هدفشان کمک به کارگزاران و دست اندرکاران مالی برای انجام یک مشاهده بینش آفرین مشخص است بنابر این درجه از کارآزمودگی و تخصص موجود در زمره سیستم های خبره واقعی به حساب آورده نمونه‌هایی از این قبیل نرم‌افزارها عبارتند از: INsiGht و NEWVIEWS که هر دو عملاً سیستم های جامع حسابداری مشتمل بر تحلیلهای مالی اند یعنی در عین اینکه همه عملیات حسابداری را انجام می‌دهند. در محیطهای شبیه صفحه گسترده تحلیلهای مالی خود را نیز عرضه می‌کنند نرم‌افزار شناخته شده دیگر REFLEX نام دارد که ۱۲ نسبت کلیدی را محاسبه کرده و تحلیل و تفسیرهای پیشنهادی خود را نیز ارائه می‌کند این تحلیلها همراه با ارائه نسبت‌ها، روندها و نمودارهای مناسب است.

سیستم های خبره آسان کننده تصمیم‌گیری

در این نوع از سیستم های خبره مالی یک پایگاه دانش وجود دارد که ضمن تحلیل نسبتهای مالی می‌تواند بینشهای خود نسبت به موضوع مورد تحلیل را نیز ارائه دهد و همین امر موجب تمایز آن از سیستم های دسته اول می‌شود بنابر این در این قبیل سیستمها سه مرحله از چهار مرحله فرایند تصمیم‌گیری انجام می‌شود یک نمونه از این سیستم های خبره «ANSWERS» است.

سیستم های خبره

سیستم های خبره برنامه‌هایی هستند که رفتار یک انسان متخصص در یک زمینه بخصوص را تقلید می‌کنند. این برنامه از اطلاعاتی که استفاده کننده در آن‌ها ذخیره می‌کند جهت اعلام یک عقیده در یک موضوع بخصوص استفاده می‌کند. از این رو سیستم‌های خبره تا هنگامی که بتوانند موضوعی را که با پاسخ‌های شما مطابقت داشته باشد بیابند به سؤال کردن از شما ادامه می‌دهند. به منظور درک کردن آنچه یک سیستم متخصص انجام می‌دهد مکالمه زیر که بین یک متخصص در امور میوه و فرد دیگری که می‌خواهد از وی توصیه‌ای در این مورد دریافت کند را در نظر بگیرید:

— متخصص: آیا میوه سبز است؟

— استفاده کننده: خیر.

— متخصص: آیا میوه قرمز است؟

— استفاده کننده: بله.

— متخصص: آیا این میوه روی درخت رشد می‌کند؟

— استفاده کننده: خیر.

— متخصص: آیا این میوه روی یک بوته رشد می‌کند؟

— استفاده کننده: بله.

— متخصص: آیا این بوته تیغ دارد؟

— استفاده کننده: بله.

— متخصص: این میوه تمشک است!

هدف از طراحی یک سیستم متخصص رایانه‌ای در امر میوه تولید چنین گفتگویی است. در حالت عمومی تر سیستم متخصص می‌کوشد که به استفاده کننده از خود در مورد موضوعی که از آن آگاه است راهنمایی دهد.

اگر بخواهیم تعریفی از سیستم های خبره ارایه دهیم می‌توان گفت «سیستم های خبره برنامه‌های رایانه‌ای هستند که با استفاده از قواعد مورد استفاده متخصصین به حل مسایل در زمینه‌ای خاص می‌پردازند. وجه تمایز اصلی سیستم های خبره نسبت به برنامه‌های کاربردی گذشته آن است که از استدلال مبتنی بر استنباط و استنتاج استفاده می‌کند در برنامه‌های کاربردی معمولی دارای الگوریتم و روش حل مسئله ثابتی هستیم اما در روش‌های شهودی می‌توان با آزمون و خطا مسایل دشوارتری را حل کرد و به جواب رضایت بخش رسید.

مفهوم سیستم های خبره بر این فرض استوار است که دانش متخصصین در حافظه رایانه ضبط و در دسترس کسانی که به کاربرد آن دانش نیاز دارند، قرار گیرد. یک سیستم های پشتیبانی تصمیم شامل برنامه‌هایی است که بازتاب دهندهٔ چگونگی نگرش یک مدیر در حل یک مسئله می‌باشد. یک سیستم خبره، ازطرف دیگر فرصتی برای تصمیم‌گیری‌ها پیش می‌آورد که از قابلیت‌های مدیر افزون تر است. تمایز دیگر میان سیستم خبره و سیستم پشتیبانی تصمیم، توانایی سیستم خبره در توصیف چگونگی استدلال جهت دستیابی به یک راهکار خاص است. اغلب اوقات شرح نحوه دست یابی به یک راه حل، از خود راه حل ارزشمندتر است.

داده‌هایی که به وسیله برنامه‌های سیستم  پشتیبانی تصمیم استفاده می‌شود، اصولاً به صورت عددی بوده و برنامه‌ها، تأکید بر استفاده از روش‌های ریاضی دارند، لیکن داده‌هایی که به وسیله سیستم های خبره به کار می‌رود نمادی تر بوده و اغلب به صورت متن تشریحی می‌باشند. برنامه‌های سیستم‌های خبره بر به کارگیری برنامه‌های منطقی تأکید دارند.

تفاوت سیستم های خبره با سایر سیستم های اطلاعاتی

سیستم های خبره برخلاف سیستم های اطلاعاتی که بر روی داده‌ها(Data) عمل می‌کنند، بر دانش (Knowledge) متمرکز شده است. همچنین دریک فرایند نتیجه‌گیری، قادر به استفاده از انواع مختلف داده‌ها عددی(Digital)، نمادی Symbolic و مقایسه‌ای (Analog) می‌باشند. یکی دیگر از مشخصات این سیستم‌ها استفاده از روشهای ابتکاری (Heuristic) به جای روشهای الگوریتمی می‌باشد. این توانایی باعث قرار گرفتن دامنهٔ گسترده‌ای از کاربردها در برد عملیاتی سیستم های خبره می‌شود. فرایند نتیجه‌گیری در سیستم های خبره بر روشهای استقرایی و قیاسی پایه‌گذاری شده است. از طرف دیگر این سیستم ها می‌توانند دلایل خود در رسیدن به یک نتیجه‌گیری خاص یا جهت و مسیر حرکت خود به سوی هدف را شرح دهند. با توجه به توانایی این سیستم‌ها در کار در شرایط فقدان اطلاعات کامل یا درجات مختلف اطمینان در پاسخ به پرسشهای مطرح‌شده، سیستم های خبره نماد مناسبی برای کار در شرایط عدم اطمینان(Uncertainty) یا محیطهای چند وجهی می‌باشند.

سیستم خبره قسمت ۱
سیستم خبره قسمت ۲
سیستم خبره قسمت ۳
سیستم خبره قسمت ۴
سیستم خبره قسمت ۵
سیستم خبره قسمت ۶

۲۱ دی ۱۳۹۸/0 نظرها/توسط م. دلیری
http://behsanandish.com/wp-content/uploads/expertsystemf.jpg 256 256 م. دلیری https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png م. دلیری2020-01-11 10:00:592019-11-27 16:01:41سیستم خبره قسمت 1

تشخیص هویت زیست سنجی و بیومتریک قسمت ۲

تشخیص هویت زیست سنجی

شناسایی از روی عنبیه چشم

عنبیه قسمت رنگی چشم است که ترکیبی است از نوعی ماهیچه به شکل دایره با یکسری خطوط شعاعی، لایه‌ای یا توری مانند که در پیش از تولد انسان شکل گرفته است و تا زمان مرگ تقریباً هیچ تغییری نمی‌کند. این ماهیچه شامل یکسری کارکترها مانند: خطوط، حلقه‌ها، حفره‌ها، شیارها، تارها، لکه‌ها و… است که قابل تفکیک می‌باشند. می‌توان گفت که عنبیه چشم همه افراد با یکدیگر متفاوت است.

تصویر عنبیه معمولاً توسط یک دوربین تک رنگ مادون قرمز (۷۰۰–۹۰۰nm) که مجهز به سنسور CCD است گرفته می‌شود. معمولاً فاصله دوربین تا چشم باید چیزی در حدود ۱۸ اینچ باشد. (تابش نور به عنبیه سپس اندازه‌گیری بازگشت آن) فرایند پردازش بدین شکل است که ابتدا مکان و اندازه مردمک در تصویر مشخص شده و سپس با به دست آوردن مکان و اندازه عنبیه، کلیه تصویر عنبیه که در میان این دو دایره قرار دارد به شکل مستطیلی با ابعاد معین تبدیل می‌شود، این تکنیک باعث می‌شود تا با کوچک یا بزرگ شدن مردمک تصویر مستطیل شکل تقریباً ثابت بماند تا در انجام فرایندهای بعدی مشکلی نباشد. تصویر موجود در مستطیلی با ابعاد معین دارای مشخصه‌های قابل تبدیل به کدهای باینری است، در این تبدیل‌ها روشهای مختلفی وجود دارد که هر یک مزایا و معایب خودرا دارند.

پس از بدست آوردن الگوی باینری، با استفاده از بدست آوردن فاصله همینگ بین الگوی موجود با الگوی بدست آمده می‌توان نتیجه تطبیق را بدست آورد.

در روشهای دیگری مانند نمونه یابی در مکانهای مشخص با برداشت چند نمونه از قسمتی از تصویر عنبیه که مشخصات قابل توجهی دارد، در زمان تشخیص با استفاده از نمونه‌های ذخیره شده و مکان یابی نمونه‌ها، عنبیه افراد قابل تشخیص است. این سیستم دارای قابلیت خوبی در تشخیص افراد است بدین دلیل که عنبیه هم منحصربه‌فرد است و هم در برابر گذشت زمان مقاوم، ولی متأسفانه حجم الگوها در این روش بسیار بالا است، این تکنولوژی بسیار گران است، کاربر پسند نیست و به دلیل اینکه در حین نمونه برداری لازم است که چشم کاملاً بی حرکت باشد لذا الگو برداری ممکن است دقیق نباشد.

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

شناسایی از روی شبکیه چشم

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

شناسایی از روی نمودار حرارتی چهره

نمودار حرارتی چهره نیز یکی دیگر از پارامترهایی است که در تمامی افراد حتی دوقلوها نیز متفاوت است. نمودار ترموگرام در برابر گذشت زمان [تا مدت محدودی]، آرایش و اصلاح کردن مقاوم است، حتی جراحی پلاستیک نیز باعث بروز آسیب به نمودار ترموگرام نمی‌شود. جهت تصویر برداری از چهره از یک دوربین مادون قرمزبا طول موج ۳ الی ۵ میکرون یا ۸ الی ۱۲ میکرون بدین صورت که تا عمق ۴ سانتی‌متر زیر پوست را حس کند استفاده می‌شود.

شناسایی از روی نحوه راه رفتن

معمولاً این روش در جاهایی که ارتباط مستقیم با افراد میسر نیست کاربرد دارد خصوصاً در فرودگاه‌ها و معابر امنیتی. (این سیستم شناسایی تقریباً یک سیستم شناسایی مخفی است) در این روش یک تصویر از شخص در هنگام راه رفتن بدست می‌آید که معرف نمودار جابجایی و زمان برای وی است. در هنگام راه رفتن افراد حرکت پاها و سر افراد با یکدیگر متفاوت است (البته حرکت دستان نیز در برخی موارد کاربرد دارد) که الگوی بدست آمده از این قسمتها می‌باشد.

شناسایی از روی هندسه دست

دراین سیستم دست در یک مکان مشخص مطابق شکل قرار می‌گیرد. سپس با استفاده از یک دوربین دیجیتال CCD با کیفیت مطلوب ۳۲۰۰۰ پیکسل تصویر دست از دو نمای فوقانی و کناری گرفته می‌شود؛ که یک تصویر ۳بعدی از دست تولید می‌کند. از تصویر بدست آمده حدوداً ۱۷ قسمت دست اندازه‌گیری می‌شود، من‌جمله: انگشتان (طول، پهنا، ضخامت، انحنا) و پارامترهای هندسی دیگر که در شکل آمده است. معمولاً حجم داه بدست آمده ۹بایت است.

ترکیبات بیومتریک

با ترکیبات بیومتریک می‌توان کارایی، امنیت و دقت سیستم را تا حد قابل ملاحظه‌ای افزایش داد، که در ذیل به تعدادی از روشهای ممکن اشاره خواهیم کرد:

ترکیب سنسور

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

ترکیب واحد نمونه برداری

در این روش ما از چند واحد نمونه برداری می‌کنیم. بعنوان مثال در روش اثر انگشت از دو انگشت اشاره و انگشت وسط ویا انگشتان دیگر نیز عمل نمونه برداری را انجام می‌دهیم ویا از انگشت دستچپ و راست نمونه برداری می‌کنیم.

ترکیب نمونه برداری

در این روش چندین بار از مشخصه مورد نظر نمونه برداری می‌کنیم و ممکن است دو یا چند الگو از یک کاربر داشته باشیم. بعنوان مثال از انگشت کاربر دوبار نمونه برداری می‌کنیم و در حافظه ذخیره می‌کنیم.

ترکیب روش‌های بیومتریک

در این روش مااز ترکیب دو یا چند روش بیومتریک استفاده می‌کنیم. بعنوان مثال: اثر انگشت + هندسه چهره + هندسه دست

منبع


از دیر باز انسان برای بقا، نیاز به تشخیص دوست از دشمن داشته است و تشخیص هویت برای وی امری حیاتی بوده و هست، لذا امروزه سعی در مکانیزه سازی سیستم های شناسایی یا تشخیص هویت شده است. نیازی که پیشرفت در آن باعث کاهش تخلفات، افزایش امنیت، تسریع در امور روزمره و … شده است. در گذشته جهت شناسایی جرم و جنایتکار، از روال شناسایی اثر انگشت و چهره‌نگاری استفاده می‌شده، اما اکنون سیستم های مکانیزه‌ای ایجاد شده است. به مجموعه ای از فناوری ها، جهت تشخیص و تایید هویت یک فرد به صورت خودکار بيومتريک می گویند. به طور مثال برای صدور اجازه ورود به یک مجموعه، نیاز به شناسایی و تایید هویت می باشد. روش های شناسایی به صورت های زیر انجام می گیرد:
۱- اسناد و مدارک شناسایی – کارت های هوشمند، کارت های مغناطیسی، کلید، پاسپورت، شناسنامه و …
۲- اطلاعات – رمز یا کلمه عبور، پین کد و …
۳- ویژگی های فیزیولوژیکی و رفتاری – اثر انگشت؛ صدا؛ چشم و … (به این روش شناسایی سوم تشخیص هویت Biometric گفته می شود)
کلیه سامانه های بيومتريک دارای قابلیت تشخیص و تایید هویت به صورت یکجا هستند. مرحله تشخيص هويت با جستجوی ویژگی های فرد در بانک اطلاعاتي موجود در سامانه صورت می گیرد و درصورت وجود اطلاعات ذخیره شده شخص در بانک اطلاعاتي سامانه،  هویت او شناسایی و مشخص می شود. در مرحله تائيد هويت تمامی مقایسات شخص و بانک اطلاعاتی به صورت تک به تک انجام می شود، سامانه کد ورودي را با کد موجود مقايسه مي کند و مشخص مي کند که آيا مورد تشخيص داده شده درست است يا نه. در بيشتر سامانه هاي بيومتريک مرحله ثبت نام در سامانه از مرحله تشخيص هويت جدا شده است، زيرا در مرحله ثبت نام بايد اين که آيا فرد قبلا در سامانه ثبت نام کرده است يا نه مدنظر قرار گيرد تا از ثبت نام يک نفر در سامانه با چند هويت مختلف جلوگيري شود و ضریب اطمينان سامانه بالا رود، در حالي که در مرحله تشخيص هويت مساله مهم فقط يافتن اطلاعات فرد از بين کدهاي ذخيره شده در بانک اطلاعات است. خصوصیات يک ویژگی بيومتريک خوب جهت ذخیره سازی در بانک اطلاعاتی و استفاده در سامانه عبارتند از :
١‐ منحصر به فرد بودن: هر فرد ويژگي را به طور منحصر به فرد و متمايز با ديگران داشته باشد.
٢ ‐ استخراج پذيري: بتوان آن ويژگي را در مورد هر فرد به راحتي، با سرعت بالا و بدون نياز به پردازش هاي زياد  به دست آورد.
٣‐ قابليت تفکيک پذيري بالا: يعني اين که اختلاف اين ويژگي در مورد دو فرد متفاوت خيلي زياد باشد تا به راحتي قابل تقکيک باشند.
٤‐ پايداري: ويژگي استخراج شده در طول زمان و در اثر تغييراتي در يک شخص در طول عمرش به وجود مي آيند بدون تغيير باقي بماند.

گروه های بیومتریک

بررسی های زیست سنجی به دو گروه تقسیم می شود:
۱– Behavioral (خصوصیات رفتاری)
۲– Physiometric (خصوصیات فیزیکی)
تکنیک های رفتاری که طرز انجام کاری توسط کاربر مانند امضا کردن یا بیان کردن یک عبارت را می سنجند. سنجش اعضا که یک خصوصیت فیزیکی را مانند اثرانگشت یا شکل یک دست می سنجند. رفتار با زمان و حال شخص تغییر می کند. تکنیک های سنجش رفتار هنگامی به بهترین نحو عمل می کنند که مرتبا استفاده شوند، و به این ترتیب سطوح تغییرات هر فرد مورد توجه قرار گیرد. مدل های سنجش های رفتاری باید این تغییرات را لحاظ کنند. از طرف دیگر، سنجش های مشخصات فیزیکی به ابزار سنجش بزرگ تر و نرم افزار پیچیده تری احتیاج دارند. به عنوان مثال، آن ها مجبورند موقعیت دست را با الگو تطبیق دهند. باید میان سیستم هایی که برای تشخیص فرد طراحی شده اند و آن هایی که باید فقط هویت یک فرد را تایید کنند تفاوت قائل شویم. عمل دوم بسیار آسان تر است و پارامترهای تایید هویت می توانند بر پایه همان شخص تنظیم گردند. این روش حالت طبیعی برای سیستم های کارت هوشمند است که الگوی مرجع (template) در کارت یا یک سیستم مرکزی نگه داری می شود.

  یک تست زیست سنجی شامل سه مرحله است:

–۱ ثبت مشخصات
۲– استفاده
۳– بروز رسانی
کاربران با سنجش های اولیه در سیستم ثبت نام می شود. این عمل معمولا سه مرتبه یا بیشتر برای ثبت اطلاعات دقیق تر انجام می گیرد. مدت زمان انجام این عمل در این مرحله بیشتر از زمانی است که سیستم برای تشخیص کاربر مورد استفاده قرار می گیرد. وقتی که سنجش انجام گرفت هنگام استفاده ،نمونه با الگوی مرجع مقایسه می شود. در اینجا تعیین سطوح مناسب تفاوت مجاز (tolerance) مخصوصا برای سنجشهای رفتاری مهم است. بیشتر سیستم های زیست سنجی مخصوصا آنهایی که از مشخصات رفتاری استفاده میکنند، باید برای بروز رسانی الگوی مرجع تدارک دیده شده باشند. در حالت تشخیص صدا و امضا، معمولا یک فانکشن تطبیقی استفاده می شود که با هر بار سنجش توسط سیستم، بروز رسانی الگوی مرجع انجام میگیرد.
برای مشخصاتی که تغییر کندتر است، سیستم میتواند درصد تطبیق یا تعداد دفعاتی که یک شخص پذیرفته نمی شود را اعلام کند و در مواقعی که لازم است، عمل ثبت مجددا انجام گیرد. ثبت تراکنش اغلب یک ویژگی مفید است و میتواند براحتی در یک سیستم بر پایه کارت هوشمند ایجاد گردد.

اجزای یک سیستم زیست سنجی

یک سیستم زیست سنجی شامل موارد زیر است:

۱-ابزار اندازه گیری

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

۲-نرم افزار عامل

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

۳-سخت افزار و سیستمهای بیرونی

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

تشخیص هویت زیست سنجی و بیومتریک قسمت ۱
تشخیص هویت زیست سنجی و بیومتریک قسمت ۲
تشخیص هویت زیست سنجی و بیومتریک قسمت ۳
تشخیص هویت زیست سنجی و بیومتریک قسمت ۴
تشخیص هویت زیست سنجی و بیومتریک قسمت ۵

۲۹ مهر ۱۳۹۸/0 نظرها/توسط م. دلیری
http://behsanandish.com/wp-content/uploads/biometric3-1.jpg 256 256 م. دلیری https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png م. دلیری2019-10-21 11:00:322019-10-07 12:22:59تشخیص هویت زیست سنجی و بیومتریک قسمت 2

شبکه های عصبی مصنوعی چیست؟ قسمت ۲

هوش محاسباتی

تاریخچه شبکه های عصبی مصنوعی

از قرن نوزدهم به طور همزمان اما جداگانه از سویی نروفیزیولوزیست‌ها سعی کردند سامانه یادگیری و تجزیه و تحلیل مغز را کشف کنند و از سوی دیگر ریاضیدانان تلاش کردند تا مدل ریاضی بسازند که قابلیت فراگیری و تجزیه و تحلیل عمومی مسائل را دارا باشد. اولین کوشش‌ها در شبیه‌سازی با استفاده از یک مدل منطقی توسط مک کلوک و والتر پیتز انجام شد که امروزه بلوک اصلی سازنده اکثر شبکه های عصبی مصنوعی است. این مدل فرضیه‌هایی در مورد عملکرد نورون‌ها ارائه می‌کند. عملکرد این مدل مبتنی بر جمع ورودی‌ها و ایجاد خروجی است. چنانچه حاصل جمع ورودی‌ها از مقدار آستانه بیشتر باشد اصطلاحاً نورون برانگیخته می‌شود. نتیجه این مدل اجرای توابع ساده مثل AND و OR بود.

نه تنها نروفیزیولوژیست‌ها بلکه روان شناسان و مهندسان نیز در پیشرفت شبیه‌سازی شبکه های عصبی تأثیر داشتند. در سال ۱۹۵۸ شبکه پرسپترون توسط روزنبلات معرفی گردید. این شبکه نظیر واحدهای مدل شده قبلی بود. پرسپترون دارای سه لایه به همراه یک لایه وسط که به عنوان لایه پیوند شناخته شده می‌باشد، است. این سامانه می‌تواند یاد بگیرد که به ورودی داده شده خروجی تصادفی متناظر را اعمال کند.

سامانه دیگر مدل خطی تطبیقی نورون می‌باشد که در سال ۱۹۶۰ توسط ویدرو و هاف (دانشگاه استنفورد) به وجود آمد که اولین شبکه های عصبی به کار گرفته شده در مسائل واقعی بودند. Adalaline یک دستگاه الکترونیکی بود که از اجزای ساده‌ای تشکیل شده بود، روشی که برای آموزش استفاده می‌شد با پرسپترون فرق داشت.

در سال ۱۹۶۹ میسکی و پاپرت کتابی نوشتند که محدودیت‌های سامانه‌های تک لایه و چند لایه پرسپترون را تشریح کردند. نتیجه این کتاب پیش داوری و قطع سرمایه‌گذاری برای تحقیقات در زمینه شبیه‌سازی شبکه های عصبی بود. آنها با طرح اینکه طرح پرسپترون قادر به حل هیچ مسئله جالبی نمی‌باشد، تحقیقات در این زمینه را برای مدت چندین سال متوقف کردند.

با وجود اینکه اشتیاق عمومی و سرمایه‌گذاری‌های موجود به حداقل خود رسیده بود، برخی محققان تحقیقات خود را برای ساخت ماشین‌هایی که توانایی حل مسائلی از قبیل تشخیص الگو را داشته باشند، ادامه دادند. از جمله گراسبگ که شبکه‌ای تحت عنوان Avalanch را برای تشخیص صحبت پیوسته و کنترل دست ربات مطرح کرد. همچنین او با همکاری کارپنتر شبکه‌های ART را بنانهادند که با مدل‌های طبیعی تفاوت داشت. اندرسون و کوهونن نیز از اشخاصی بودند که تکنیک‌هایی برای یادگیری ایجاد کردند. ورباس در سال ۱۹۷۴ شیوه آموزش پس انتشار (Back Propagation) خطا را ایجاد کرد که یک شبکه پرسپترون چندلایه البته با قوانین نیرومندتر آموزشی بود.

پیشرفت‌هایی که در سال ۱۹۷۰ تا ۱۹۸۰ بدست آمد برای جلب توجه به شبکه های عصبی بسیار مهم بود. برخی فاکتورها نیز در تشدید این مسئله دخالت داشتند، از جمله کتاب‌ها و کنفرانس‌های وسیعی که برای مردم در رشته‌های متنوع ارائه شد. امروز نیز تحولات زیادی در تکنولوژی ANN ایجاد شده‌است.

چرا از شبکه های عصبی استفاده می‌کنیم

 

تصویری از عروس دریایی در رؤیای عمیق گوگل
تصویری از عروس دریایی در شبکه عصبی convolutional رؤیای عمیق گوگل

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

  1. یادگیری تطبیقی: توانایی یادگیری اینکه چگونه وظایف خود را بر اساس اطلاعات داده شده به آن یا تجارب اولیه انجام دهد در واقع اصلاح شبکه را گویند.
  2. خود سازماندهی: یک شبکه عصبی مصنوعی به صورت خودکار سازماندهی و ارائه داده‌هایی که در طول آموزش دریافت کرده را انجام دهد. نورون‌ها با قاعدهٔ یادگیری سازگار شده و پاسخ به ورودی تغییر می‌یابد.
  3. عملگرهای بی‌درنگ: محاسبات در شبکه عصبی مصنوعی می‌تواند به صورت موازی و به وسیله سخت‌افزارهای مخصوصی که طراحی و ساخت آن برای دریافت نتایج بهینه قابلیت‌های شبکه عصبی مصنوعی است انجام شود.
  4. تحمل خطا: با ایجاد خرابی در شبکه مقداری از کارایی کاهش می‌یابد ولی برخی امکانات آن با وجود مشکلات بزرگ همچنان حفظ می‌شود.
  5. دسته‌بندی: شبکه های عصبی قادر به دسته‌بندی ورودی‌ها بر ای دریافت خروجی مناسب می‌باشند.
  6. تعمیم دهی: این خاصیت شبکه را قادر می‌سازد تا تنها با برخورد با تعداد محدودی نمونه، یک قانون کلی از آن را به دست آورده، نتایج این آموخته‌ها را به موارد مشاهده از قبل نیز تعمیم دهد. توانایی که در صورت نبود آن سامانه باید بی‌نهایت واقعیت‌ها و روابط را به خاطر بسپارد.
  7. پایداری-انعطاف‌پذیری: یک شبکه عصبی هم به حد کافی پایدار است تا اطلاعات فراگرفته خود را حفظ کند و هم قابلیت انعطاف و تطبیق را دارد و بدون از دست دادن اطلاعات قبلی می‌تواند موارد جدید را بپذیرد.

 

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

 

شبکه مغز کرم الگانس

شبکه مغز کرم الگانس Caenorhabditis elegans _ شبکه نورونی این کرم از ۳۰۲ نورون و حدود ۷۰۰۰ اتصال سیناپس تشکیل شده است.

یک شبکه عصبی به طور کلی با یک کامپیوتر سنتی در موارد زیر تفاوت دارد:

  1. شبکه های عصبی دستورات را به صورت سری اجرا نکرده، شامل حافظه‌ای برای نگهداری داده و دستورالعمل نیستند.
  2. به مجموعه‌ای از ورودی‌ها به صورت موازی پاسخ می‌دهند.
  3. بیشتر با تبدیلات و نگاشت‌ها سروکار دارند تا الگوریتم‌ها و روش‌ها.
  4. شامل ابزار محاسباتی پیچیده نبوده، از تعداد زیادی ابزارساده که اغلب کمی بیشتر از یک جمع وزن دار را انجام می‌دهند تشکیل شده‌اند.

 

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

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

 

نورون مصنوعی

یک نورون مصنوعی سامانه‌ای است با تعداد زیادی ورودی و تنها یک خروجی. نورون دارای دو حالت می‌باشد، حالت آموزش و حالت عملکرد. در حالت آموزش نورون یادمی‌گیرد که در مقابل الگوهای ورودی خاص برانگیخته شود یا در اصطلاح آتش کند. در حالت عملکرد وقتی یک الگوی ورودی شناسایی شده وارد شود، خروجی متناظر با آن ارائه می‌شود. اگر ورودی جزء ورودی‌های از پیش شناسایی شده نباشد، قوانین آتش برای بر انگیختگی یا عدم آن تصمیم‌گیری می‌کند.

 

از نورون‌های انسان تا نورون مصنوعی

اکشن پتانسیل نورون زیستی: پتانسیل الکتریکی نورون در حالت استراحت در -۷۰ mV قرار دارد. با اعمال محرک بر غشای نورون، پتانسیل غشا به -۵۵ میلی ولت می‌رسد پس از آن در صورتی که محرک اعمال شود پتانسیل غشا به سرعت در نقطه +۴۰ mV به اوج خود می‌رسد و با همان سرعت، پتانسیل غشا به -۹۰ mV کاهش و overshoots پیدا می‌کند و در نهایت دوباره به resting potential (پتانسیل حالت استراحت) در -۷۰ mV بازمی‌گردد

با کنار گذاشتن برخی از خواص حیاتی نورون‌ها و ارتباطات درونی آنها می‌توان یک مدل ابتدایی از نورون را به وسیله کامپیوتر شبیه‌سازی کرد.

ساختار شبکه های عصبی

یک شبکه عصبی شامل اجزای سازنده لایه‌ها و وزن‌ها می‌باشد. رفتار شبکه نیز وابسته به ارتباط بین اعضا است. در حالت کلی در شبکه های عصبی سه نوع لایه نورونی وجود دارد:

  • لایه ورودی: دریافت اطلاعات خامی که به شبکه تغذیه شده‌است.
  • لایه‌های پنهان: عملکرد این لایه‌ها به وسیله ورودی‌ها و وزن ارتباط بین آنها و لایه‌های پنهان تعیین می‌شود. وزن‌های بین واحدهای ورودی و پنهان تعیین می‌کند که چه وقت یک واحد پنهان باید فعال شود.
  • لایه خروجی: عملکرد واحد خروجی بسته به فعالیت واحد پنهان و وزن ارتباط بین واحد پنهان و خروجی می‌باشد.

شبکه‌های تک لایه و چند لایه‌ای نیز وجود دارند که سازماندهی تک لایه که در آن تمام واحدها به یک لایه اتصال دارند بیشترین مورد استفاده را دارد و پتانسیل محاسباتی بیشتری نسبت به سازماندهی‌های چند لایه دارد. در شبکه‌های چند لایه واحدها به وسیله لایه‌ها شماره گذاری می‌شوند (به جای دنبال کردن شماره گذاری سراسری).

هر دو لایه از یک شبکه به وسیله وزن‌ها و در واقع اتصالات با هم ارتباط می‌یابند. در شبکه های عصبی چند نوع اتصال یا پیوند وزنی وجود دارد: پیشرو: بیشترین پیوندها از این نوع است که در آن سیگنال‌ها تنها در یک جهت حرکت می‌کنند. از ورودی به خروجی هیچ بازخوردی (حلقه) وجود ندارد. خروجی هر لایه بر همان لایه تأثیری ندارد.

  • پسرو: داده‌ها از گره‌های لایه بالا به گره‌های لایه پایین بازخورانده می‌شوند.
  • جانبی: خروجی گره‌های هر لایه به عنوان ورودی گره‌های همان لایه استفاده می‌شوند.

تقسیم‌بندی شبکه های عصبی

بر مبنای روش آموزش به چهار دسته تقسیم می‌شوند:

  1. وزن ثابت: آموزشی در کار نیست و مقادیر وزن‌ها به هنگام نمی‌شود. کاربرد: بهینه‌سازی اطلاعات (کاهش حجم، تفکیک‌پذیری و فشرده سازی) و حافظه‌های تناظری
  2. آموزش بدون سرپرست: وزن‌ها فقط بر اساس ورودی‌ها اصلاح می‌شوند و خروجی مطلوب وجود ندارد تا با مقایسه خروجی شبکه با آن و تعیین مقدار خطا وزن‌ها اصلاح شود. وزن‌ها فقط بر اساس اطلاعات الگوهای ورودی به هنگام می‌شوند. هدف استخراج مشخصه‌های الگوهای ورودی بر اساس راهبرد خوشه یابی یا دسته‌بندی و تشخیص شباهت‌ها (تشکیل گروه‌هایی با الگوی مشابه) می‌باشد، بدون اینکه خروجی یا کلاس‌های متناظر با الگوهای ورودی از قبل مشخص باشد. این یادگیری معمولاً بر پایه شیوه برترین هم خوانی انجام می‌گیرد. شبکه بدون سرپرست وزن‌های خود را بر پایه خروجی حاصل شده از ورودی تغییر می‌دهد تا در برخورد بعدی پاسخ مناسبی را برای این ورودی داشته باشد. در نتیجه شبکه یادمی‌گیرد چگونه به ورودی پاسخ بدهد. اصولاً هدف این است که با تکنیک نورون غالب نورونی که بیشترین تحریک آغازین را دارد برگزیده شود. بنابر این در شبکه‌های بدون سرپرست یافتن نورون غالب یکی از مهمترین کارها است.
  3. آموزش با سرپرست: به ازای هر دسته از الگوهای ورودی خروجی‌های متناظر نیز به شبکه نشان داده می‌شود و تغییر وزن‌ها تا موقعی صورت می‌گیرد که اختلاف خروجی شبکه به ازای الگوهای آموزشی از خروجی‌های مطلوب در حد خطای قابل قبولی باشد. در این روش‌ها یا از خروجی‌ها به وزن‌ها ارتباط وجود دارد یا خطا به صورت پس انتشار از لایه خروجی به ورودی توزیع شده‌است و وزن‌ها اصلاح می‌شوند. هدف طرح شبکه‌ای است که ابتدا با استفاده از داده‌های آموزشی موجود، آموزش ببیند و سپس با ارائه بردار ورودی به شبکه که ممکن است شبکه آن را قبلاً فراگرفته یا نگرفته باشد کلاس آن را تشخیص دهد. چنین شبکه‌ای به طور گسترده برای کارهای تشخیص الگو به کار گرفته می‌شود.
  4. آموزش تقویتی: کیفیت عملکرد سامانه به صورت گام به گام نسبت به زمان بهبود می‌یابد. الگوهای آموزشی وجود ندارد اما با استفاده از سیگنالی به نام نقاد بیانی از خوب یا بد بودن رفتار سامانه بدست می‌آید (حالتی بین یادگیری با سرپرست و بدون سرپرست).

کاربرد شبکه های عصبی

شبکه های عصبی مصنوعی دارای دامنه کاربرد وسیعی می‌باشند از جمله سامانه‌های آنالیز ریسک، کنترل هواپیما بدون خلبان، آنالیز کیفیت جوشکاری، آنالیز کیفیت کامپیوتر، آزمایش اتاق اورژانس، اکتشاف نفت و گاز، سامانه‌های تشخیص ترمز کامیون، تخمین ریسک وام، شناسایی طیفی، تشخیص دارو، فرایندهای کنترل صنعتی، مدیریت خطا، تشخیص صدا، تشخیص هپاتیت، بازیابی اطلاعاتراه دور، شناسایی مین‌های زیردریایی، تشخیص اشیاء سه بعدی و دست نوشته‌ها و چهره و… در کل می‌توان کاربردهای شبکه های عصبی را به صورت زیر دسته‌بندی کرد:

تناظر (شبکه الگوهای مغشوش وبه هم ریختهرا بازشناسی می‌کند)، خوشه یابی، دسته‌بندی، شناسایی، بازسازی الگو، تعمیم دهی (به دست آوردن یک پاسخ صحیح برای محرک ورودی که قبلاً به شبکه آموزش داده نشده)، بهینه‌سازی.

امروزه شبکه های عصبی در کاربردهای مختلفی نظیر مسائل تشخیص الگو که خود شامل مسائلی مانند تشخیص خط، شناسایی گفتار، پردازش تصویر و مسائلی از این دست می‌شود و نیز مسائل دسته‌بندی مانند دسته‌بندی متون یا تصاویر، به کار می‌روند. در کنترل یا مدل سازی سامانه‌هایی که ساختار داخلی ناشناخته یا بسیار پیچیده‌ای دارند نیز به صورت روزافزون از شبکه های عصبی مصنوعی استفاده می‌شود. به عنوان مثال می‌توان در کنترل ورودی یک موتور(کنترل‌کننده موتور) از یک شبکه عصبی استفاده نمود که در این صورت شبکه عصبی خود تابع کنترل را یاد خواهد گرفت. کاربرد مناسب تر شبکه عصبی (در مقایسه با روش‌هایی از قبیل PID)برای کنترل یک سیستم دور موتور در برابر تغییرات ناگهانی بار و زمان پاسخ دهی نیز مطرح شده است،

 

معایب شبکه های عصبی

با وجود برتری‌هایی که شبکه های عصبی نسبت به سامانه‌های مرسوم دارند، معایبی نیز دارند که پژوهشگران این رشته تلاش دارند که آنها را به حداقل برسانند، از جمله:

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

 

تصویری از شبکه عصبی RNN

انواع شبکه های عصبی مصنوعی

  • Dynamic Neural Network
    • Feedforward neural network FNN
    • Recurrent neural network RNN
      • RNN تکنولوژی speech recognition و handwriting recognition را ممکن کرد.
        • Hopfield network
        • Boltzmann machine
        • Simple recurrent networks
        • Echo state network
        • Long short term memory network
        • Bi-directional RNN
        • Hierarchical RNN
        • Stochastic neural networks
    • Kohonen Self-Organizing Maps
    • Autoencoder
    • Backpropagation
    • probabilistic neural network PNN
    • Time delay neural network TDNN
  • Static Neural Network
    • Neocognitron
    • Radial basis function network RBF
    • Learning vector quantization
    • Perceptron
      • Adaline model
      • Convolutional neural network CNN
        • Deep Dream Google
    • Modular neural networks
      • Committee of machines COM
      • Associative neural network ASNN
  • Memory Network
    • Google / Deep Mind
    • facebook / MemNN
    • Holographic associative memory
    • One-shot associative memory
    • Neural Turing Machine
    • Adaptive resonance theory
    • Hierarchical temporal memory
  • Other types of Networks
    • Instantaneously trained networks ITNN
    • Spiking neural networks SNN
      • Pulse Coded Neural Networks PCNN
    • Cascading neural networks
    • Neuro-fuzzy networks
    • Growing Neural Gas GNG
    • Compositional pattern-producing networks
    • Counterpropagation network
    • Oscillating neural network
    • Hybridization neural network
    • Physical neural network
      • Optical neural network
      • neuromorphic hardware

تمایز Morphologische سلول‌های عصبی ۱_Unipolar neuron (نورون تک قطبی) ۲_ Bipolar neuron (نورون دو قطبی) ۳_ نورون‌های چند قطبی (سیستم مغز) ۴_ Pseudounipolar neuron (سیستم عصبی محیطی)

منبع

شبکه های عصبی مصنوعی چیست؟ قسمت ۱
شبکه های عصبی مصنوعی چیست؟ قسمت ۲
شبکه های عصبی مصنوعی چیست؟ قسمت ۳
شبکه های عصبی مصنوعی چیست؟ قسمت ۴

۱۶ مهر ۱۳۹۸/0 نظرها/توسط م. دلیری
http://behsanandish.com/wp-content/uploads/11-1.jpg 256 256 م. دلیری https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png م. دلیری2019-10-08 11:00:332019-10-07 11:19:29شبکه های عصبی مصنوعی چیست؟ قسمت 2

OpenCV چیست؟

پردازش تصویر با کتابخانه متن باز OpenCV

OpenCV چیست؟

OpenCV یا همان Open Computer Vision Library مجموعه ای از کتابخانه‌های برنامه‌نویسی پردازش تصویر و یادگیری ماشین است. این مجموعه بیشتر بر پردازش تصویر بی درنگ (به انگلیسی: Real Time) تمرکز دارد. در ابتدا توسط اینتل ساخته و پشتیبانی می‌شد و هم اکنون توسط Willow Garage و Itseez پشتیبانی می‌گردد. استفاده از آن با پروانه فری بی‌اس‌دی آزاد است. اوپن سی وی کتاب‌خانه‌ای چندسکویی است و توسط سیستم عامل های ویندوز، لینوکس، مک اواس، آی او اِس و اندروید پشتیبانی می‌شود. همچنین دارای رابط برنامه نویسی به زبان های سی، سی++، پایتون، جاوا و متلب می‌باشد.

کاربردهای OpenCV

  • فیلتر تصویر
  • سیستم تشخیص صورت
  • تشخیص حرکت
  • تعامل انسان و رایانه ( HCI )
  • رباتیک موبایل
  • درک حرکت
  • شناسایی شی
  • تقسیم‌بندی و تشخیص
  • چشم انداز عمق استریو : ادراک عمق از ۲ دوربین
  • ساختار از حرکت ( SFM )
  • ردیابی حرکت
  • واقعیت افزوده

برای پشتیبیانی از برخی زمینه‌های بالا، OpenCV یک کتاب‌خانه یادگیری ماشینی را در بردارد شامل:

  • الگوریتم متا
  • یادگیری درخت تصمیم گیری
  • درختان افزایش گرادیان
  • الگوریتم امید ریاضی-بیشینه کردن
  • الگوریتم نزدیکترین همسایه
  • دسته‌بندی کننده نایو بیز
  • شبکه عصبی مصنوعی
  • جنگل تصادفی
  • ماشین بردار پشتیبانی(SVM)

زبان‌های برنامه‌نویسی

OpenCV به زبان سی++ نوشته شده و بنیاد رابط برنامه نویسی آن به زبان سی++ است. رابط برنامه نویسی کاملی نیز برای پایتون، جاوا و متلب/اوکتاو دارد. ای‌پی‌آی این زبان‌ها در اسناد برخط OpenCV یافت می‌شود. همچنین پوشش‌هایی (به انگلیسی: Wrapper) برای زبان‌هایی همچون سی#، Ch و روبی برای تشویق پذیرش مخاطبان گسترده‌تر طراحی شدند.

  • یک رابط جی‌پی‌یو کودا-پایه از سپتامبر ۲۰۱۰ در حال پیشرفت است.
  • یک رابط OpenCL-پایه از اکتبر ۲۰۱۲ در حال گسترش است.

پشتیبیانی سیستم‌عامل

OpenCV روی ویندوز، اندروید، ماامو، فری‌بی‌اس‌دی، اوپن‌بی‌اس‌دی، آی‌اواس، بلک‌بری۱۰، لینوکس و اواس‌ده اجرا می‌شود[۳]. کاربران می‌توانند نسخه رسمی آن را از سورس‌فورج یا آخرین نسخه آن را از GitHub دریافت نمایند.

منبع


OpenCV چیست ؟
OpenCV یک کتابخانه ی متن بازبرای بینایی کامپیوتر است.این کتابخانه به زبان C و C++ نوشته شده است و تحت لینوکس و ویندوز و مکینتاش قابل اجراست.همچنین، برای واسط هایی چون Matlab,Ruby,Python وغیره ، توسعه های فعالی دارد.
هدف از طراحی OpenCV ، پردازش کارا به خصوص برای کاربرد های بی درنگ است. OpenCV می تواند با پردازنده های چند هسته ای نیز کار کند.در صورتی که تمایل دارید از بهینه سازی خودکار بیشتری روی معماری های اینتل بهره ببرید، می توانید کتابخانه های (IPP (Integrated Performance Primmitive اینتل که شامل روتین های بهینه شده سطح پایین در بسیاری از زمینه های الگوریتمی هستند را خریداری کنید. OpenCV به صورت خودکار IPP مناسب را در زمان اجرا در صورتی که کتابخانه نصب باشد، به کار می گیرد.
یکی از اهداف OpenCV فراهم کردن یک زیربنای بینایی کامپیوتر با کاربری ساده است،به طوری که افراد بتوانند برنامه های بینایی نسبتا پیچیده خود را با سرعت بسازند.کتابخانه OpenCV شامل بیش از ۵۰۰ تابع پیرامون موضوعات مختلف بینایی ، از بررسی محصول کارخانه گرفته تا تصویر برداری پزشکی،امنیت، واسط کاربر،تنظیم دوربین،رباتیک و بینایی دو چشمی است.از آنجا که همواره قرابت زیادی بین بینایی کامپیوتر و یادگیری ماشین وجود داشته است، OpenCV شامل یک کتابخانه یادگیری ماشین همه منظوره MLL(Machine Learning Library) نیز هست.این زیر کتابخانه ، روی مباحث تشخیص الگوی آماری و دسته بندی تمرکز دارد.
چه کسانی از OpenCV استفاده می کنند؟
بسیاری از دانشمندان علوم رایانه و برنامه نویسان برنامه های کاربردی، از برخی نقش های بینایی کامپوتر آگاهند.اما تعداد کمی از همه کاربردهای بینایی کامپیوتر اطلاع دارند.برای مثال،خیلی ها ازکاربرد آنها در نظارت تصویری آگاهی دارند.همچنین، بسیاری نیز از افزایش استفاده آن برای تصاویر و ویدیو در وب باخبرند. اما شمار اندکی ، کاربرد های بینایی ماشین در واسط های بازی را دیده اند.هنوز تعداد کمی درک می کنند که تصاویر فضایی و تصاویرنقشه خیابان ها(مثلا در(Google’ s Street View ، استفاده زیادی در از روش های تنظیم دوربین وتکنیک های چسباندن تصویر می کنند.برخی افراد از کاربرد های آن در کنترل امنیت، وسایل نقلیه بدون سرنشین، یا تحلیل های پزشکی اگاهند.اما تعداد کمی می دانند که بینایی ماشین تا چه حد در تولید می تواند استفاده شود.به طور کلی در تولید انبوه و خ.دکار هر چیزی ، بایستی در نقاطی از خط تولید، محصول را با استفاده از تکنیک های بینایی ماشین مورد بازرسی قرار داد.
مجوز متن باز بودن OpenCV به گونه ای است که شما می توانید یک محصول تجاری را با استفاده از OpenCV تولید کنید.اما هیچ اجباری برای متن باز بودن محصول شما وجود ندارد.به موجب این مجوز ها، کتابخانه های OpenCV جامعه کاربران زیادی را شامل می شود.
از زمان انتشار نسخه ی آلفا در ژانویه ۱۹۹۹ ، OpenCV در بسیاری از کاربرد ها، محصولات و تلاش های تحقیقاتی مورد استفاده قرار گرفته است.این کاربردها شامل چسباندن تصاویرماهواره ای و نقشه های وب به یکدیگر، تنظیم تصویر اسکن شده، کاهش نویز تصاویر پزشکی، تحلیل شی در سامانه های تشخیص اختلال و امنیت، نظارت خودکار و سامانه های امنیت، سامانه های بازرسی صنعتی، تنظیم دوربینف کاربرد های نظامی و وسیایل نقلیه هوایی، زمینی وزیرآبی بدون سرنشین است.حتی از آن می توانید در تشخیص موزیک و صوت نیز استفاده کرد به این روش که از تکنیک های تشخیص بینایی برای تصاویر طیف نگار صدا استفاده شود. OpenCV یک جز کلیدی سامانه بینایی ربات دانشگاه استنفورد، بنام استنلی بود که در مسابقات بزرگ ربات صحرایی برنده دو میلیون دلار جایزه از دارپا شد.

آشنایی کلی با OpenCV ؟

مقدمه

یکی از مشکلات توسعه دهندگان نرم افزار های بصری انجام محاسبات مختلف بر روی تصاویر است. به دلیل حجم بالای اطلاعات، پردازش آنها نیاز به برنامه نویسی بهینه دارد. شرکت Intel پروژه ای را با نام OpenCV آغاز کرد تا کتابخانه های بهینه برای انجام بلادرنگ محاسبات بصری، جهت توسعه دهندگان این دسته نرم افزار ها فراهم آورد.

OpenCV چیست ؟

OpenCV یک کتابخانه بازمتن با لایسنس BSD برای توسعه دهندگان نرم افزارهای بصری و پردازش تصویر است که در سال ۲۰۰۰ توسط شرکت Intel پا به دنیای کامپیوتر نهاد.

در حال حاضر ورژن های مختلفی از این کتابخانه موجود می باشد که معروف ترین آنها ورژن ۲.۴ و جدیدترین آنها ورژن ۳٫۱ است که آخرین ورژن پایدار محسوب می شود.

این کتابخانه با زبان C/C++ نوشته شده است ولی تقریبا در تمام زبان های برنامه نویسی معروف ازجمله Python قابل دستری است.

چه نرم افزارهایی از OpenCV استفاده می کنند ؟

نرم افزارهای بسیار زیادی از OpenCV استفاده می کنند اما با توجه به صفحه ی ویکی پدیا می توان به موارد زیر اشاره کرد.

  • ۲D and 3D feature toolkits
  • Egomotion estimation
  • Facial recognition system
  • Gesture recognition
  • Human–computer interaction (HCI)
  • Mobile robotics
  • Motion understanding
  • Object identification
  • Segmentation and recognition
  • Stereopsis stereo vision: depth perception from 2 cameras
  • Structure from motion (SFM)
  • Motion tracking
  • Augmented reality

OpenCV بر روی چه سیستم عامل هایی اجرا می شود ؟

OpenCV در سیستم عامل های مختلف اجرا می شود که از مهمترین آنها می توان به این موارد اشاره کرد.

Desktop: Windows, Linux, OS X, FreeBSD, NetBSD, OpenBSD

 Mobile: Android, iOS, Maemo, BlackBerry 10

منبع


OpenCV چیست ؟

OpenCV(کتابخانه متن باز بینایی ماشین) کتابخانه ای از توابع برنامه نویسی برای پردازش تصویر بلادرنگ می باشد.این کتابخانه از BSD license استفاده می کند از این رو برای استفاده آکادمیک و تجاری آزاد می باشد.این کتابخانه در ابتدا در زبان Ansi C پیاده سازی شده و از نسخه ۲٫x با زبان C++  در حال توسعه می باشد.در ضمن رابط هایی برای زبان های پایتون و جاوا(اندروید) را دارا می باشد و همچنین رابطی غیر رسمی برای #C نیز دارد .
این کتابخانه پلت فرم های مختلف از جمله ویندوز ،لینوکس ،اندروید،IOS , مکینتاش را پشتیبانی می کند و حاوی بیش از ۲۵۰۰ الگوریتم بهینه شده می باشد.
الگوریتم های این کتابخانه از SSE,AVX,TBB,IPP,CUDA,OpenCL جهت بهینه سازی و موازی سازی استفاده می کنند و همچنین دارای بخش یادگیری ماشین جهت خوشه بندی و کلاسیفی کردن داده می باشد نیز می باشد.

ساختار کتابخانه :

  • core: شامل تعریف ساختارها و کلاس های پایه ای جهت نگهداری داده به صورت خلوت و غیر خلوت و همچنین توابع پایه ای می باشد.
  • imgproc : ماژول پردازش تصویر که شامل فیلتر های خطی و غیر خطی ،تبدیلات هندسی (تغییر اندازه ،تبدیل آفاین ،تبدیل پرسپکتیو) ،تبدیل فضای رنگی و هیستوگرام و غیره می باشد.
  • video: ماژول های تحلیل ویدیو که شامل تخمین حرکت ،استخراج پشت زمینه و الگوریتم های مختلف ردگیری می باشد.
  • calib3d: الگوریتم های مربوط به هندسه چند دوربین , کالیبره کردن یک یا چند دوربین ،تخمین موقعیت اشیاء ،الگوریتم های مربوط به استریو و ساختارهای احیا ۳ بعدی اشیاء می باشد.
  • feature2d: شامل توابع مربوط به استخراج انواع key point ها و descriptor ها و توابع مربوط مقایسه descriptor ها می باشد.
  • bjdetect: کلیه توابع مربوط به آموزش و شناسایی اشیاء در این بخش می باشد.
  • highgui : کلیه توابع مربوط به رابط کاربری ،پخش و ضبط فیلم و توابع مربوط به codec ها در این بخش می باشد.
  • gpu : توابع و الگوریتم های مربوط به موازی سازی در این بخش می باشد.

منبع


OpenCV چیست؟

OpenCV یک کتابخانه متن باز برای زیبایی کامپیوتر است.

این کتابخانه به زبان C و ++C نوشته شده و تحت لینوکس ، ویندوز و مکینتاش قابل اجراست.

همچنین برای واسط هایی چون Matlab , Ruby , Python و . . . قابل توسعه های فعالی دارد.

هدف از طراحی OpenCV پردازش کارا به خصوص برای کاربرد های بی درنگ است.

OpenCV می تواند با پردازنده های چند هسته ای نیز کار کند.

در صورتی که تمایل دارید از بهینه سازی خودکار بیشتری روی معماری اینتل بهره ببرید می توانید کتابخانه های IPP یا ( Integrated Performance Primitives ) اینتل که شامل روتین های بهینه شده سطح پایین در بسیاری از زمینه های الگوریتمی هستند را خریداری کنید.

OpenCV به صورت خودکار IPP مناسب را در زمان اجرا در صورتی که کتابخانه نصب باشد به کار میگیرد.

یکی از اهداف OpenCV فراهم کردن یک زیربنای بینایی کامپیوتر با کاربری ساده است به طوری که افراد بتوانند برنامه های بینایی نسبتا پیچیده ی خود را به سرعت بسازند.

کتابخانه OpenCV شامل بیش از ۵۰۰ توابع پیرامون موضوعات مختلف بینایی، از بررسی محصول کارخانه گرفته تا تصویر برداری پزشکی، امنیت، واسط کاربر، تنظیم دوربین، رباتیک و بینایی دو چشمی ( استریو ) است.

از انجا که همواره قرابت زیادی بین بینایی کامپیوتر و یادگیری ماشین وجود داشته است OpenCV شامل یک کتابخانه ی یادگیری ماشین همه منظوره  ( MLL ) نیز هست. ( Machine Learning Library )

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

چه کسانی از OpenCV استفاده می کنند؟

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

هنوز تعداد کمی درک می کنند که تصاویر فضایی و تصاویر نقشه خیابان ها ( مثلا در Google’s Street View ) استفاده زیادی از روش های تنظیم دوربین و تکنیک های چسباندن تصویر می کنند.

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

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


OpenCV چیست و چرا از آن باید استفاده کنیم ؟

OpenCV یا Open Source Computer Vsion در حقیقت یک کتابخانه متن باز است که می توانید به برنامه خودتون اضافه کنید و از قابلیت ها آن استفاده کنید. این کتابخانه برای کارهای پردازش تصویر و بینایی ماشین نوشته شده است. اگر برنامه شما به زبان های C ، ++C ، پایتون ، #C و یا جاوا هست از این کتابخانه میتونید استفاده کنید.
در کد زیر با استفاده از قابلیتی که این کتابخانه به ما داده، میتونیم یک تصویر رو بخونیم

کد PHP:
    IplImage* img = cvLoadImage( "test.jpg" );

و نمایش بدیم.

کد PHP:
    cvShowImage("Example1", img);

خوب پرسشی که پیش میاید این است که چه برتری نسبت به MATLAB که از آن هم برای پردازش تصویر استفاده میشود دارد؟
دلیل اول سرعت هست که برای کارهای Real Time این کتابخانه بهینه شده ست.
دلیل دوم: از این کتابخانه می توان در Embedded System و موبایلها استفاده کرد و با آن اپلیکیشن نوشت. در Embedded System هایی که توانایی نصب linux روی آنها هست به راحتی می تونیم از این کتابخانه استفاده کنیم و با ابزارهای جانبی مثل وبکم و Kinect ارتباط برقرار کنیم.

۲۴ دی ۱۳۹۶/1 دیدگاه/توسط م. دلیری
http://behsanandish.com/wp-content/uploads/download.png 256 326 م. دلیری https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png م. دلیری2018-01-14 07:51:002019-08-26 01:07:21OpenCV چیست؟

برگه‌ها

آموزش های زبان سی پلاس پلاس (++C)

آموزش های زبان سی پلاس پلاس (++C)

۲ شهریور ۱۳۹۷/توسط محمد مهدی ابراهیمی
https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png 0 0 محمد مهدی ابراهیمی https://behsanandish.com/wp-content/uploads/logo-farsi-englisi-300x195-1.png محمد مهدی ابراهیمی2018-08-24 22:27:112020-12-16 12:33:28آموزش های زبان سی پلاس پلاس (++C)



استخدام برنامه نویس آشنا به پردازش تصویر
بیمه + حقوق + پاداش

  • سامانه مدیریت پارکینگ خصوصی بهسان در شرکت توزیع برق شهر کرد۲ مرداد ۱۴۰۰ - ۰۵:۳۲
  • سامانه ثبت تردد جاده ای بهسان درشهرداری چرمهین۲۶ خرداد ۱۴۰۰ - ۱۱:۲۳
  • سامانه مدیریت پارکینگ خصوصی بهسان در شرکت توزیع برق شهر کرد۱۳ خرداد ۱۴۰۰ - ۰۶:۰۸
  • سامانه جامع مدیریت پارکینگ بهسان۲۶ آبان ۱۳۹۹ - ۱۲:۱۴

دسته‌ها

  • آموزش پردازش تصویر در نرم افزار متلب (Matlab)
  • آموزش عمومی پردازش تصویر و بینایی ماشین
  • آموزش های زبان برنامه نویسی سی شارپ
  • آموزش های عمومی هوش مصنوعی
  • اخبار
  • بینایی ماشین (Machine Vision) و بینایی کامپیوتر
  • پردازش تصویر با کتابخانه متن باز OpenCV
  • پروژه ها و سورس کدهای پردازش تصویر و بینایی ماشین
  • پروژه ها و سورس کدهای هوش مصنوعی
  • تشخيص پلاک خودرو
  • تشخیص نوری کاراکتر و تشخیص دست خط
  • تشخیص هویت زیست سنجی
  • دسته‌بندی نشده
  • دوربین (camera)
  • مقالات
  • مقالات ، سمینارها و کنفرانس های پردازش تصویر
  • مقالات، سمینارها و کنفرانس های هوش مصنوعی
  • هوش محاسباتی
  • وبلاگ

تلفن های تماس:

تلفن: ۹۱۰۰۱۸۸۱(۰۳۱)
بازرگانی و فروش:۰۹۳۶۷۳۷۸۴۶۹
پشتیبانی: ۰۹۱۱۷۶۱۰۲۷۵

ساعات کاری

از شنبه تا چهارشنبه : ۰۹:۰۰ تا ۱۷:۰۰

پنچ شنبه ها : از ۰۹:۰۰ تا ۱۳:۳۰

پیوند ها :

  • درخواست دمو
  • مطالب و آموزش ها
  • همکاری با بهسان اندیش
  • درباره ما

محصولات :

  • پلاک خوان
  • نرم افزار ثبت تردد جاده ای
  • نرم افزار مدیریت پارکینگ
  • نرم افزار مدیریت کارواش
  • نرم افزار تعمیرگاه خودرو
  • نرم افزار جامع مدیریت باسکول
  • ماژول رله کنترل راهبند
تمامی حقوق مالکیت معنوی این ‌سایت برای شرکت بهسان اندیش سپهر، محفوظ است.
  • Instagram
  • Facebook
  • Youtube
  • Linkedin
  • Mail
رفتن به بالا