有限图片识别

王者永乐 2014-02-11 09:19:39
有AB两组各10张的10*15像素的小图片,上面画的分别是0-9十个数字,现在已知其中一组图片与数字的对应关系,给出另外一组的任意一张图片,怎么用程序识别出这个图片上的数字是多少?

A组图片跟B组图片不同但是极其相似
...全文
201 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
公西雒 2014-02-12
  • 打赏
  • 举报
回复
引用 13 楼 wangzheyongle 的回复:
[quote=引用 8 楼 danding_ge 的回复:] 像这样,把图片分成15部分(分的越多越精确),遍历图片上每个部分的像素点,如果其中一个像素点是黑的,则记为1,反之为0;然后记录一张图片中每个部分像素点为1个数量,判断这个数量与哪个数字对应部分的像素点数量匹配。
这个做法相当于是忽略了细节,粗略估计黑点分布相似度,如果把握好分割的区间会要的效果,如果区间没把握好,698得到的结果回事一样的[/quote]如果你的图像都是固定的,那么这个区间就很好把握。
gomoku 2014-02-11
  • 打赏
  • 举报
回复
二维平面上两个点的距离的平方 = (x1 - x2)^2 + (y1 - y2)^2 三维上两个点的距离的平方 = (x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2 同理,N维上两个点的距离的平方 = (a1 - a2)^2 + (b1 - b2)^2 + (c1 - c2)^2 + ... 距离就是差异的一种体现。
公西雒 2014-02-11
  • 打赏
  • 举报
回复
引用 9 楼 gomoku 的回复:
计算图片和对比组每个图片的差异,差异最小的可以认定匹配。 判断差异有很多方法,一个比较简单的就是求像素之间的距离: 1、把10*15像素变成一个向量,比如每个像素取它的亮度,并把所有的行合并成一个150维的向量(第一行写在前面,跟着写第二行...): {255, 124, ..., 255} 2、假设对比组图像1的向量为: {255, 126, ..., 255} 3、两个向量的距离(的平方)就是: float distance1 = (255-255)^2 + (124-126)^2 + ... + (255-255)^2;
看不懂,能不能解释下向量。
公西雒 2014-02-11
  • 打赏
  • 举报
回复
例如图中第一部分有大概20个像素点,0-9十个数字中第一部分像素值大于15的有0 2 3 5 6 8 9,再看第三行第一列的部分有50个像素点,大于40的还剩下6 8,最后看第二行第三列也有50个像素点,大于40的只有8了。当然,这是人脑的逻辑,直接用于做计算机的算法并不适用,所以还要靠你自己来设计,我只给你提供个思路,多动动脑子吧!
gomoku 2014-02-11
  • 打赏
  • 举报
回复
计算图片和对比组每个图片的差异,差异最小的可以认定匹配。 判断差异有很多方法,一个比较简单的就是求像素之间的距离: 1、把10*15像素变成一个向量,比如每个像素取它的亮度,并把所有的行合并成一个150维的向量(第一行写在前面,跟着写第二行...): {255, 124, ..., 255} 2、假设对比组图像1的向量为: {255, 126, ..., 255} 3、两个向量的距离(的平方)就是: float distance1 = (255-255)^2 + (124-126)^2 + ... + (255-255)^2;
公西雒 2014-02-11
  • 打赏
  • 举报
回复
像这样,把图片分成15部分(分的越多越精确),遍历图片上每个部分的像素点,如果其中一个像素点是黑的,则记为1,反之为0;然后记录一张图片中每个部分像素点为1个数量,判断这个数量与哪个数字对应部分的像素点数量匹配。
王者永乐 2014-02-11
  • 打赏
  • 举报
回复
就这么个样子
公西雒 2014-02-11
  • 打赏
  • 举报
回复
不知你的10个数字是什么字体,是否规范。
王者永乐 2014-02-11
  • 打赏
  • 举报
回复
引用 2 楼 danding_ge 的回复:
根据像素分布情况判断呗
关键在于怎么判断没有误判?
王者永乐 2014-02-11
  • 打赏
  • 举报
回复
引用 1 楼 liuchaolin 的回复:
直接用OCR不行吗?
正在尝试,但是觉得就0-9十个数字,没必要用别的dll 想自己搞定
公西雒 2014-02-11
  • 打赏
  • 举报
回复
根据像素分布情况判断呗
md5e 2014-02-11
  • 打赏
  • 举报
回复
直接用OCR不行吗?
md5e 2014-02-11
  • 打赏
  • 举报
回复
引用 7 楼 wangzheyongle 的回复:



就这么个样子


private void Form1_Load(object sender, EventArgs e)
{

Bitmap sourcebm5 = new Bitmap("5.jpg");
txt_5.Text = ImageToBase64(sourcebm5, ImageFormat.Jpeg);

Bitmap sourcebm6 = new Bitmap("6.jpg");
txt_6.Text = ImageToBase64(sourcebm6, ImageFormat.Jpeg);

Bitmap sourcebm7 = new Bitmap("7.jpg");
txt_7.Text = ImageToBase64(sourcebm7, ImageFormat.Jpeg);
}

private string ImageToBase64(System.Drawing.Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();

// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}

尝试转成Base64字符串,然后截取比较
王者永乐 2014-02-11
  • 打赏
  • 举报
回复
引用 8 楼 danding_ge 的回复:
像这样,把图片分成15部分(分的越多越精确),遍历图片上每个部分的像素点,如果其中一个像素点是黑的,则记为1,反之为0;然后记录一张图片中每个部分像素点为1个数量,判断这个数量与哪个数字对应部分的像素点数量匹配。
这个做法相当于是忽略了细节,粗略估计黑点分布相似度,如果把握好分割的区间会要的效果,如果区间没把握好,698得到的结果回事一样的

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧