استخراج اثر امضا با استفاده از Ces.SignatureExtractor
نویسنده: هادی مزارعی
تاریخ: ۱۴۰۴/۰۵/۰۴ ۲۲:۳۷
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
Ces.SignatureExtractor از اثر امضا بجای تصویر اسکن شدهی امضا استفاده کنم (Nuget Package).Extractor را ایجاد میکنیم و سپس متد Extract را صدا میزنیم و نتیجه یک مقدار Bitmap خواهد بود. نمونه زیر با استفاده از UI موجود در پروژه پیادهسازی شده:var extractor = new Ces.SignatureExtractor.Extractor();
this.pbFinalImage.Image = extractor.Extract(
_openFileDialog.FileName
, chkUseOriginalColor.Checked
, btnCustomColor.BackColor
, (byte)tbBackgroundPrecision.Value);useOriginalColor = false باشد.نکته: رنگ امضا در تصویر اسکن شده نباید با خودکار قرمز باشد.
imgOriginal و سپس یک تصویر خالی با نام imgSignature و هم اندازه با imgOriginal تعریف شده.imgSignature و در همان موقعیت اعمال میکند. اما این مساله دو نکته دارد 1) بدست آوردن روشنایی رنگ 2) آیا این پیکسل در محدودهی رنگ امضا میباشد یا خیر.brightness از متد GetBrightness بدست آمده و در ادامه مقدار alpha که همان شفافیت رنگ است محاسبه شده است. اما منطق این ضرایب چیست؟ یک رنگ بطور عادی دارای شدت 1 است و در داتنت برای آنکه بتوان شفافیت رنگ را تنظیم کرد باید مقدار Alphaی رنگ رو مشخص کنیم که عدد 0 کاملا شفاف است و رنگ دیده نمیشود و عدد 255 که حداکثر شدت رنگ است. بنابراین اگر در خط امضا نقاطی وجود داشته باشد (مانند انتهای رسم امضا) که دارای شدت کمتری هستند باید رنگ جدید (در صورت مشخص کردن customColor) با همان شدت رسم شود. در غیر اینصورت تمام خطوط با شدت 1 رسم می شود و زیبایی امضا از بین خواهد رفت.alpha چطور محاسبه شده؟ اگر اثر امضا در نقطهای حدود 20 درصد شفافیت کمتری داشته باشد در حقیقت 20 درصد از مقدار Alpha باید کم شود. بنابراین ضریب brightness که عددی float و بین 0 تا 1 است ابتدا از عدد 1 کم شده و سپس حاصل در 255 ضرب شده است تا میزان کاهش alpha بدست آید. حالا هر زمان که متد SetPixel رنگ را اعمکال میکند میتواند مقدار alpha را نیز در نظر بگیرد. با این روش اگر مسیر یک خط بدلیل کشیدن خودکار از آبی پررنگ به کمرنگ رسم شده باشد، برنامه ضمن تغییر رنگ، دقیقا همان شدت را در پیکسل جدید اعمال خواهد کرد.imgSignature برنامه باید بداند که آیا پیکسل جاری در محدوده خط امضا است یا خیر. تشخیص این موضوع برمبنای طیف رنگهایی است که دارای رنگ قرمز از محدود 0 تا 200 می باشند. اگر رنگی با این ویژگی تشخیص داده شود، برنامه از آن عبور خواهد کرد و هیچ پیکسلی را به تصویر نهایی انتقال نخواهد داد. به همین دلیل اگر رنگ امضا با خودکار قرمز باشد برنامه نمیتواند امضا را رسم کند.precision را کمتر از 200 در نظر بگیرید (به مثال زیر توجه کنید).imgSignature و پیدا شدن مرز بیرونی امضا، برنامه محدوده داخل مرز امضا را در یک تصویر جدید رسم کرده و به عنوان نتیجه برگشت خواهد داد.precision = 226precision = 185precision = 139 خروجی بصورت زیر خواهد شد: