利用神经网络算法的C#手写数字识别(二)




#region 潘正平新增加的
public List<Rectangle> _rowRctList;
public List<Rectangle> _currentWordRctsList;
public List<Rectangle> _currentCharRctsList;
public List<Bitmap> m_bitmaps;
int _irowIndex = 0;
int _iwordIndex = 0;
int _icharIndex;
Bitmap _originalBitmap;
Bitmap _currentRow;
Bitmap _currentWord; /// <summary>
/// 潘正平新加
/// </summary>
/// <param name="bitmap"></param>
public void PatternRecognitionThread(Bitmap bitmap)
{
m_bitmaps = new List<Bitmap>();
_originalBitmap = bitmap;
if (_rowRctList == null)
{
_rowRctList = AForge.Imaging.Image.PatternRectangeBoundaryList
(_originalBitmap, 255, 30, 1, true, 5, 5);
_irowIndex = 0; }
foreach (Rectangle rowRect in _rowRctList)
{
_currentRow = AForge.Imaging.ImageResize.ImageCrop
(_originalBitmap, rowRect);
if (_iwordIndex == 0)
{
_currentWordRctsList = AForge.Imaging.Image.PatternRectangeBoundaryList
(_currentRow, 255, 20, 10, false, 5, 5);
} foreach (Rectangle wordRect in _currentWordRctsList)
{
_currentWord = AForge.Imaging.ImageResize.ImageCrop
(_currentRow, wordRect);
_iwordIndex++;
if (_icharIndex == 0)
{
_currentCharRctsList =
AForge.Imaging.Image.PatternRectangeBoundaryList
(_currentWord, 255, 1, 1, false, 5, 5);
} foreach (Rectangle charRect in _currentCharRctsList)
{
Bitmap _currentChar = AForge.Imaging.ImageResize.ImageCrop
(_currentWord, charRect);
_icharIndex++;
Bitmap bmptemp = AForge.Imaging.ImageResize.FixedSize
(_currentChar, 21, 21);
bmptemp = AForge.Imaging.Image.CreateColorPad
(bmptemp, Color.White, 4, 4);
bmptemp = AForge.Imaging.Image.CreateIndexedGrayScaleBitmap
(bmptemp);
byte[] graybytes = AForge.Imaging.Image.GrayscaletoBytes(bmptemp);
PatternRecognizingThread(graybytes);
m_bitmaps.Add(bmptemp);
}
string s = " \n";
_form.Invoke(_form._DelegateAddObject, new Object[] { 1, s });
if (_icharIndex == _currentCharRctsList.Count)
{
_icharIndex = 0;
}
}
if (_iwordIndex == _currentWordRctsList.Count)
{
_iwordIndex = 0;
}
}
}
#endregion
#region 潘正平新增加的
private void OpenTestImagesToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!_bTestingDataReady || !_MinstTestingDatabase.m_bDatabaseReady)
{
MessageBox.Show("请先加载测试数据库!");
return;
}
OpenFileDialog fDlg = new OpenFileDialog();
fDlg.Filter = "*.bmp|*.bmp|*.jpg|*.jpg";
if (fDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Bitmap bmp = new Bitmap(fDlg.FileName);
//this.pictureBoxMain.Image = bmp;
Bitmap bmp2 = new Bitmap(bmp);
this.ImagePatternRecognization(bmp2);
}
} private void ImagePatternRecognization(Bitmap bmp)
{
List<Mutex> mutexs = new List<Mutex>(2);
for (int i = 0; i < 2; i++)
{
var mutex = new Mutex();
mutexs.Add(mutex);
} NNTessing = new NNTestPatterns(_NN, _Mnistdatabase, _Preference, _bDatabaseReady, null, null, this, mutexs);
var thread = new Thread(() => NNTessing.PatternRecognitionThread(bmp));
thread.Start();
while(thread.IsAlive)
{
Application.DoEvents();
Thread.Sleep(10);
}
this.pictureBoxMain.Image = bmp;
this.pictureBoxMain.Refresh();
} NNTestPatterns NNTessing;
Pen pen = new Pen(Color.Red); private void pictureBoxMain_Paint(object sender, PaintEventArgs e)
{
if (NNTessing != null)
{
if (NNTessing._currentCharRctsList != null)
{
e.Graphics.DrawRectangles(pen, NNTessing._currentCharRctsList.ToArray());
}
if (NNTessing._currentWordRctsList != null)
{
e.Graphics.DrawRectangles(pen, NNTessing._currentWordRctsList.ToArray());
}
if (NNTessing._rowRctList != null)
{
e.Graphics.DrawRectangles(pen, NNTessing._rowRctList.ToArray());
}
}
}
#endregion


#region 潘正平新增加的
public List<Rectangle> _rowRctList;
public List<Rectangle> _currentWordRctsList;
public List<Rectangle> _currentWordCharRctsList;
public List<Bitmap> m_bitmaps;
int _irowIndex = 0;
int _iwordIndex = 0;
int _icharIndex;
Bitmap _originalBitmap;
Bitmap _currentRow;
Bitmap _currentWord; /// <summary>
/// 潘正平新加
/// </summary>
/// <param name="bitmap"></param>
public void PatternRecognitionThread(Bitmap bitmap)
{
_currentWordCharRctsList = new List<Rectangle>();
m_bitmaps = new List<Bitmap>();
_originalBitmap = bitmap;
if (_rowRctList == null)
{
_rowRctList = AForge.Imaging.Image.PatternRectangeBoundaryList
(_originalBitmap, 255, 30, 1, true, 5, 5);
_irowIndex = 0; }
foreach (Rectangle rowRect in _rowRctList)
{
_currentRow = AForge.Imaging.ImageResize.ImageCrop
(_originalBitmap, rowRect);
if (_iwordIndex == 0)
{
_currentWordRctsList = AForge.Imaging.Image.PatternRectangeBoundaryList
(_currentRow, 255, 20, 10, false, 5, 5);
} foreach (Rectangle wordRect in _currentWordRctsList)
{
_currentWord = AForge.Imaging.ImageResize.ImageCrop
(_currentRow, wordRect);
_iwordIndex++;
List<Rectangle> _currentCharRctsList = new List<Rectangle>();
if (_icharIndex == 0)
{
_currentCharRctsList = AForge.Imaging.Image.PatternRectangeBoundaryList(_currentWord, 255, 1, 1, false, 5, 5);
}
string strWord = string.Empty;
foreach (Rectangle charRect in _currentCharRctsList)
{
Bitmap _currentChar = AForge.Imaging.ImageResize.ImageCrop(_currentWord, charRect);
_icharIndex++;
Bitmap bmptemp = AForge.Imaging.ImageResize.FixedSize(_currentChar, 21, 21);
bmptemp = AForge.Imaging.Image.CreateColorPad(bmptemp, Color.White, 4, 4);
bmptemp = AForge.Imaging.Image.CreateIndexedGrayScaleBitmap(bmptemp);
byte[] graybytes = AForge.Imaging.Image.GrayscaletoBytes(bmptemp);
strWord += PatternRecognizingThread(graybytes);
m_bitmaps.Add(bmptemp);
//
Rectangle rctCharAbsolute = new Rectangle(wordRect.Left + charRect.Left + rowRect.Left, wordRect.Top + charRect.Top + rowRect.Top, charRect.Width, charRect.Height);
this._currentWordCharRctsList.Add(rctCharAbsolute);
}
string s = " \n";
_form.Invoke(_form._DelegateAddObject, new Object[] { 1, s });
_form.Invoke(_form._DelegateAddObject, new Object[] { 8, strWord });
if (_icharIndex == _currentCharRctsList.Count)
{
_icharIndex = 0;
}
}
if (_iwordIndex == _currentWordRctsList.Count)
{
_iwordIndex = 0;
}
}
}
#endregion
利用神经网络算法的C#手写数字识别(二)的更多相关文章
- 【机器学习】k-近邻算法应用之手写数字识别
上篇文章简要介绍了k-近邻算法的算法原理以及一个简单的例子,今天再向大家介绍一个简单的应用,因为使用的原理大体差不多,就没有没有过多的解释. 为了具有说明性,把手写数字的图像转换为txt文件,如下图所 ...
- 卷积神经网络应用于tensorflow手写数字识别(第三版)
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_dat ...
- 基于sk_learn的k近邻算法实现-mnist手写数字识别且要求97%以上精确率
1. 导入需要的库 from sklearn.datasets import fetch_openml import numpy as np from sklearn.neighbors import ...
- MLP 之手写数字识别
0. 前言 前面我们利用 LR 模型实现了手写数字识别,但是效果并不好(不到 93% 的正确率). LR 模型从本质上来说还只是一个线性的分类器,只不过在线性变化之后加入了非线性单调递增 sigmoi ...
- 利用神经网络算法的C#手写数字识别
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...
- 利用神经网络算法的C#手写数字识别(一)
利用神经网络算法的C#手写数字识别 转发来自云加社区,用于学习机器学习与神经网络 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwri ...
- C#中调用Matlab人工神经网络算法实现手写数字识别
手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化 投影 矩阵 目标定位 Matlab 手写数字图像识别简介: 手写 ...
- 实现手写数字识别(数据集50000张图片)比较3种算法神经网络、灰度平均值、SVM各自的准确率—Jason niu
对手写数据集50000张图片实现阿拉伯数字0~9识别,并且对结果进行分析准确率, 手写数字数据集下载:http://yann.lecun.com/exdb/mnist/ 首先,利用图片本身的属性,图片 ...
- 利用c++编写bp神经网络实现手写数字识别详解
利用c++编写bp神经网络实现手写数字识别 写在前面 从大一入学开始,本菜菜就一直想学习一下神经网络算法,但由于时间和资源所限,一直未展开比较透彻的学习.大二下人工智能课的修习,给了我一个学习的契机. ...
随机推荐
- nginx&http 第五章 https non-fd 读写检测
EPOLL的LT/ET 模式下的读写 从一个非阻塞的socket上调用recv/send函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, ...
- C++的四种强制转型形式:
C++同时提供了四种新的强制转型形式(通常称为新风格的或C++风格的强制转型): const_cast(expression)dynamic_cast(expression)reinterpret_c ...
- 剑指offer刷题(算法类_2)
排序 035-数组中的逆序对(归并排序) 题目描述 题解 代码 复杂度 029-最小的K个数(堆排序) 题目描述 题解 代码 复杂度 029-最小的K个数(快速排序) 题目描述 题解 代码 复杂度 位 ...
- ceph使用memdisk做journal
记得在很久很久以前,ceph当时的版本是有提供使用内存做journal的配置的,当时是使用的tmpfs,但是现在的版本在搜资料的时候,发现关于这个的没怎么找到资料,邮件列表里面有人有提到怎么做,看了下 ...
- JVM字节码执行引擎
一.概述 在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译器执行(通过即时编译器产生本地代码执行)两种选择,所有的Java虚拟机的执行引擎都是一致的:输 ...
- 详解FL Studio压缩器——Fruity Limiter(下)
Hello!小伙伴们又见面啦-接上一篇,本篇咱们继续讲解音乐编曲软件FL Studio20压缩器内容. 包络"ENVELOPE"中包含三个旋钮,它们都有什么作用呢?一起来揭晓吧! ...
- jQuery 第十章 ajax 什么是回调地狱 优化回调地狱
回调地狱 什么是回调地狱,回调函数,一个嵌套着一个,到最后,缩略图成了 一个三角形, 造成了可阅读性差,可阅读性差就代表代码的可维护性 和 可迭代性差,最后还有一个就是可扩展性差. 也不符合设计模式的 ...
- QQ账号测试用例
- Session 与 sql 会话,mysql 权限设置,mybatis 逆向工程
Session 与 Sql 会话注意点: 通过 sqlSessionFactoty 工厂建立的与sql的会话,在进行相应的插入操作后,需要进行 commit 操作才会让数据库执行插入更新操作.如何主键 ...
- iPhone/iOS开启个人热点的相关位置调整小结
冬至已到,圣诞将近,最近公司项目实在太多,三四个项目反复的切换真的让人焦头烂额,趁今天有点空,把维护的三个项目顺利送出,刚好可以缕缕思路,记录一下最近遇到的问题.说不着急那是假的,客户一天天的催的确实 ...