Лабораторна робота
з предмету периферійні пристрої
Лабораторна робота №4
Тема роботи: Сканер. Системи розпізнавання текстів
Мета роботи: Вивчення принципів функціонування сканерів, а також алгоритмів розпізнавання текстів.
Завдання для виконання роботи
Сформувати чорно-білі бітові зображення букв А, В, С, D
Кореляційний метод розпізнавання полягає в обчисленні взаємокореляційної або інших функцій взаємокореляції і їх порівняння з порогом прийняття рішення:
де N – кількість елементів послідовності, яка задає символ;
Р - поріг прийняття рішення.
Алгоритм Фрімена. Цей метод заснований на виділенні контура по алгоритму Фрімена з подальшою ідентифікацією контура. Ланцюговий код Фрімена дозволяє представити контур довільної форми у вигляді послідовності коротких векторів .
Матриця векторів Фрімена (а), контур (б)
Для реалізації алгоритму слід виконати наступні пункти:
Пошук початкової точки. Сканування вертикальною лінійною апертурою і розгортка горизонтальної апертури до першого засвіченого піксела.
Перевірка всіх сусідніх пікселів по напряму, починаючи з вектору 0, до тих пір, поки не зустрінеться засвічений піксель. Поворот від початкової точки здійснюється за збільшенням номерів векторів. Якщо сусідніх пікселів не знайдено, то вважається, що знайдений окремий піксель і його не розглядають.
Напрям останнього вектора наголошується як поточний, а його кінець вважається поточним пікселем.
Повторюють сканування сусідніх пікселів до виявлення засвічення, починаючи від пікселя, розташованого зліва від поточного вектора за годинниковою стрілкою.
Алгоритм повторюють з п. 3 до тих пір, поки положення поточного пікселя не співпаде з початковим.
Недоліком цього методу є те, що розпізнавання символу залежить від його повороту.
Умова розпізнавання:
,
де - кодований контур; - еталонний контур; р - поріг (0,8-0,9).
int analis (float **)
{
int i, j, k, n=100;
int A[100] [100], B[100] [100], C[100] [100], D[100] [100];
file *et; float Cxx;
et = fopen (“etalon.dat”,”r”);
for ( i=0; i<n; i++) for ( j=0; j<n; j++ )
fscant ( et, “%d”, & A [i] [j] );
for ( i=0; i<n; i++) for ( j=0; j<n; j++ )
fscant ( et, “%d”, & B [i] [j] );
for ( i=0; i<n; i++) for ( j=0; j<n; j++ )
fscant ( et, “%d”, & C [i] [j] );
for ( i=0; i<n; i++) for ( j=0; j<n; j++ )
fscant ( et, “%d”, & D [i] [j] );
Cxx=0
for ( i=0; i<n; i++) for ( j=0; j<n; j++ )
for ( k=0; k<n; k++)
Cxx+=(x[i*n+j]*A[i][j+k]*(x[i*n+j])* A[i][j+k])
Cxx/=n-1;
floes (et);
if (Cxx>= 0,9) return 1;
Cxx=0
for ( i=0; i<n; i++) for ( j=0; j<n; j++ )
for ( k=0; k<n; k++)
Cxx+=(x[i*n+j]*B[i][j+k]*(x[i*n+j])* B[i][j+k])
Cxx/=n-1;
if (Cxx>= 0,9) return 2;
Cxx=0
for ( i=0; i<n; i++) for ( j=0; j<n; j++ )
for ( k=0; k<n; k++)
Cxx+=(x[i*n+j]*C[i][j+k]*(x[i*n+j])* C[i][j+k])
Cxx/=n-1;
if (Cxx>= 0,9) return 3
Cxx=0
for ( i=0; i<n; i++) for ( j=0; j<n; j++ )
for ( k=0; k<n; k++)
Cxx+=(x[i*n+j]*D[i][j+k]*(x[i*n+j])* D[i][j+k])
Cxx/=n-1;
if (Cxx>= 0,9) return 4;
return 0;
}
Висновок: На цій лабораторній роботі ми вивчили принцип функціонування сканерів, а також алгоритм розпізнавання текстів.