تشخیص اسکناس در متلب
توضیحات ویدئو
پروژه “تشخیص اسکناس با کمک متلب” یک پروژه جذاب و کاربردی در حوزه پردازش تصویر و هوش مصنوعی است. هدف اصلی این پروژه، توانایی تشخیص و شناسایی اسکناسهای مختلف بر اساس تصاویر آنها است. با استفاده از نرمافزار متلب و الگوریتمهای ماشین بینایی، میتوان اسکناسها را به صورت خودکار تشخیص داده و اطلاعات مربوط به آنها را استخراج کرد. برای انجام این پروژه، از تصاویر دیجیتالی اسکناسها به عنوان داده ورودی استفاده میشود. این تصاویر میتوانند از روی اسکنر یا دوربینی گرفته شده باشند. اسکناسها معمولاً ویژگیهای مشخصی دارند که با استفاده از الگوریتمهای پردازش تصویر قابل استخراج هستند. این ویژگیها میتوانند شامل الگوهای ریاضی، نوشتاری، رنگی و سایر اطلاعات مربوط به اسکناس باشند.
این پروژه میتواند در بسیاری از زمینهها کاربرد داشته باشد. به عنوان مثال، در صنعت بانکداری و ارزی، تشخیص خودکار اسکناسهای جعلی میتواند به عنوان یک ابزار مهم در تشخیص تقلب و کنترل اعتبار استفاده شود. همچنین، در سیستمهای خودپرداز بانکی، تشخیص اسکناسها میتواند فرایند شمارش و تشخیص مبالغ مالی را سریعتر و دقیقتر کند.
کد این پروژه در ادامه قابل مشاهده است. به طور خلاصه این پروژه، ابتدا کدها و کتابخانههای مورد نیاز را فراخوانی میکند و مسیر تصاویر اسکناسها را تعیین میکند. سپس ماتریسهای مختلفی را از فایلهای متنی خوانده و در متغیرهای مربوطه ذخیره میکند. سپس یک حلقه برای هر تصویر اسکناس اجرا میشود. در هر مرحله، تصویر خوانده میشود و ماتریس نتایج و ماتریس رایگیری صفر مقداردهی میشود. سپس مقدار کمینه فاصله را بین تصویر و ماتریسهای گری اسکیل، RGB، HSV و HSM محاسبه میکند و در متغیر min_distance ذخیره میکند. سپس مقادیر مختلف ماتریسها و فاصله کمینه در متغیر result ذخیره میشوند. همچنین، با توجه به مقدار کمینه فاصله، مقادیر متغیر result برای شناسایی اسکناس تنظیم میشوند. در ادامه، ماتریس رایگیری برای تعداد دادههای آموزشی و نتایج حاصل از رایگیری (تعداد رای بیشتر) محاسبه میشوند و در نهایت تصاویر نمایش داده میشوند. نتیجه نهایی به یک فایل متنی ذخیره میشود و متغیر done برابر 1 قرار میگیرد تا نشان دهد که کد اجرا شده است.
کدهای پروژه
clc;
clear;
close all;
path = 'img/test/';
images = dir(strcat(path, '*.jpg'));
count = length(images);
GrayscaleMatris = ReadMatrix('GrayscaleMatris.txt');
HSMatris = ReadMatrix('HSMatris.txt');
HSVMatris = ReadMatrix('HSVMatris.txt');
RGBMatris = ReadMatrix('RGBMatris.txt');
for i = 1 : count
HSMatris(i, 4) = ( HSMatris(i, 4) / 2 ) * 255;
HSVMatris(i, 5) = ( HSVMatris(i, 5) / 3 ) * 255;
RGBMatris(i, 5) = RGBMatris(i, 5) / 3;
end
result = zeros(count, 10);
train_names = trainData();
train_size = size(train_names);
train_size = train_size(2);
figure;
for i = 1 : count
image_file = images(i).name;
image = imread(strcat(path, image_file));
voteMatris = zeros(train_size + 1, 1);
min_distance = min( min( GrayscaleMatris(i, 3), RGBMatris(i, 5) ), min( HSMatris(i, 4), HSVMatris(i, 5) ) );
result(i, 1) = GrayscaleMatris(i, 3);
result(i, 2) = RGBMatris(i, 5);
result(i, 3) = HSMatris(i, 4);
result(i, 4) = HSVMatris(i, 5);
result(i, 6) = min_distance;
if(min_distance == GrayscaleMatris(i, 3))
result(i, 7) = GrayscaleMatris(i, 2);
result(i, 8) = 1;
end
if(min_distance == RGBMatris(i, 5))
result(i, 7) = RGBMatris(i, 4);
result(i, 8) = 2;
end
if(min_distance == HSMatris(i, 4))
result(i, 7) = HSMatris(i, 3);
result(i, 8) = 3;
end
if(min_distance == HSVMatris(i, 5))
result(i, 7) = HSVMatris(i, 4);
result(i, 8) = 4;
end
voteMatris( GrayscaleMatris(i, 2) + 1, 1 ) = voteMatris( GrayscaleMatris(i, 2) + 1, 1 ) + 1;
voteMatris( RGBMatris(i, 4) + 1, 1 ) = voteMatris( RGBMatris(i, 4) + 1, 1 ) + 1;
voteMatris( HSMatris(i, 3) + 1, 1 ) = voteMatris( HSMatris(i, 3) + 1, 1 ) + 1;
voteMatris( HSVMatris(i, 4) + 1, 1 ) = voteMatris( HSVMatris(i, 4) + 1, 1 ) + 1;
voteMatris( result(i, 7) + 1, 1 ) = voteMatris( result(i, 7) + 1, 1 ) + 1;
maxVote = max(voteMatris);
result(i, 5) = NaN;
result(i, 9) = NaN;
if(maxVote > 1)
for j = 1 : train_size() + 1
if(voteMatris(j) == maxVote)
break;
end
end
if(j == 1)
result(i, 10) = 0;
else
result(i, 10) = j - 1;
end
else
result(i, 10) = result(i, 7);
end
subplot(round(count / 4), round(count / 4),i),imshow(image);
if(result(i, 10) == 0)
title('no money');
else
title(train_names(result(i, 10)));
end
end
SaveMatrix(result, 'mainResultMatris.txt');
done = 1
توضیحات کدها:
مسیر تصاویر ورودی به متغیر path اختصاص داده میشود و تمام فایلهای با پسوند jpg در این مسیر با استفاده از تابع dir و در متغیر images ذخیره میشوند. سپس تعداد تصاویر موجود در متغیر count ذخیره میشود.
ماتریسهای مربوط به ویژگیهای اسکناسها (GrayscaleMatris، HSMatris، HSVMatris، RGBMatris) از فایلهای متنی خوانده میشوند.
مقادیر مشخصی از ماتریسهای HSMatris، HSVMatris و RGBMatris تغییر داده میشوند. این تغییرات شامل تبدیل برخی از مقادیر به مقیاس 255 و تقسیم بر عدد 3 است.
یک ماتریس نتیجه با ابعاد count × 10 با مقادیر صفر ایجاد میشود. این ماتریس برای ذخیره نتایج نهایی شناسایی اسکناسها استفاده میشود.
نامهای مربوط به دستههای آموزشی (اسکناسهای مختلف) از تابع trainData خوانده میشوند و در متغیر train_names ذخیره میشوند. سپس اندازه این متغیر محاسبه و در متغیر train_size ذخیره میشود.
در حلقه for اصلی، برای هر تصویر ورودی، عملیات شناسایی اسکناس انجام میشود. برای هر تصویر، تصویر ورودی با استفاده از تابع imread خوانده میشود و در متغیر image ذخیره میشود.
یک ماتریس voteMatris با ابعاد (train_size + 1) × 1 ایجاد میشود. این ماتریس برای شمارش آراء در مورد هر دسته آموزشی استخدام میشود.
مقدار کمینه از بین مقادیر GrayscaleMatris(i, 3)، RGBMatris(i, 5)، HSMatris(i, 4) و HSVMatris(i, 5) به عنوان min_distance محاسبه میشود و در ماتریس result در ستون اول تا چهارم قرار میگیرد.
در بخش بعد، با استفاده از min_distance، دسته اسکناس متناظر با آن تشخیص داده میشود و در ماتریس result در ستون هفتم و هشتم ذخیره میشود. همچنین تعداد آراء هر دسته در ماتریس voteMatris ثبت میشود.
بزرگترین تعداد آراء در voteMatris بررسی میشود و در متغیر maxVote ذخیره میشود.
در بخش بعد، بررسی میشود که آیا بیش از یک دسته با بیشترین تعداد آراء وجود دارد یا خیر. در صورت وجود بیش از یک دسته با بیشترین تعداد آراء، دسته اصلی به عنوان دسته شناسایی شده تعیین میشود و در ماتریس result در ستون دهم ذخیره میشود.
سپس تصویر ورودی به همراه نتیجه شناسایی آن در یک نمودار نمایش داده میشود. اگر دسته شناسایی شده برابر با 0 باشد، عبارت “no money” به عنوان عنوان نمایش داده میشود، در غیر این صورت نام دسته اسکناس در عنوان نمایش داده میشود.
نتیجه نهایی شناسایی اسکناسها در فایل متنی با نام txt ذخیره میشود.
متغیر done برابر با 1 قرار داده میشود تا نشان دهد که اجرای برنامه به پایان رسیده است.
دیدگاهتان را بنویسید