从图像中提取位代码

我正在一个项目中重新组合像这样的图像的代码,其中黑色矩形表示0位,白色(白色空间,不可见)1位。 有人有任何想法处理图像以提取这些信息吗?我的项目是用jav编写的,但任何解决方案都被接受了。 谢谢你的支持。 谢谢大家的支持。 我不是图像处理方面的专家,我尝试使用Canny Edge Detector Implementation来应用边缘检测,这里有免费的java实现。我使用了这个完整的图像[http://img257.imageshack.us/img257/5323/colorimg.png],减少它(比例因子= 0.4)以便快速处理,这就是结果[http://img222.imageshack页面没有自动跳转/ img222 / 8255 / colorimgout.png]。现在,我如何解码0位值的白色直肠,没有1的矩形? 该图像有10行X 16列。我不使用python,但我可以尝试将其转换为Java。 非常感谢支持。     
已邀请:
这是对旧的OMR(光学标记识别)的认可。 解决方案取决于您获得的数据的质量和一致性,因此噪音很重要。 使用图像处理库显然会有所帮助。 简单案例:图像无歪斜,无拉伸或收缩 创建图像的水平和垂直轮廓。即汇总所有列和所有行中的值并存储在数组中。对于MxN(宽x高)的图像,您将在水平轮廓中具有M个单元,在垂直轮廓中具有N个单元。 使用阈值来找出哪些单元格是白色(空),哪些是黑色。这假设您将在每行或每列中至少获得几个条目。因此,黑色单元格将定义感兴趣的位置(您将期望标记)。 基于此,您可以在表格中定义菱形,并获得菱形的坐标(您有标记的矩形),然后您只需在每个菱形中添加像素值,并根据数字,您可以定义它是否有标记或不。 案例2:歪斜(图像中的倾斜) 使用傅立叶(FFT)查找倾斜值然后对其进行转换。 案例3:拉伸或收缩 几乎与1相同,但噪音更高,可靠性更低。     
Aliostad发表了一些好评。 这是OMR,您会发现通过良好的图像处理库获得良好的一致性结果要容易得多。 www.leptonica.com是一个免费的开源“C”库,是一个非常好的起点。它可以为您处理偏斜和阈值处理任务。阈值到B / W将是一个良好的开端。 另一种选择是IEvolution - http://www.hi-components.com/nievolution.asp for .NET。 要获得成功,您需要某种类型的参考/配准标记,以允许倾斜和拉伸,尤其是在使用文档扫描或从相机图像捕获时。     
我不熟悉Java,但在Python中,您可以使用映像库打开映像。然后加载高度和宽度,并相应地按照高度/行和宽度/列将图像分割成网格。然后,只需查看这些区域中的黑色像素,或任何颜色的PIL寄存器即黑色。这显然依赖于数据的网格性质。 编辑: 做边缘检测也可能很有成效。首先应用维基百科的边缘检测方法。我使用了archive.alwaysmovefast.com/basic-edge-detection-in-python.html上找到的那个。然后将小于180的任何灰度值(如果您希望盒子更暗,只需将此值增加)转换为黑色,否则将其变为完全白色。然后创建边界框,像素全部为白色的线条。如果数据没有严重偏差,那么这应该可以很好地工作,否则你可能需要做更多的工作。请看这里的结果:http://imm.io/2BLd EDIT2: 丹尼斯,你的数据集有多大,图像有多大?如果您有数千张这些图像,则手动删除边框(红色背景和黄色条)是不可行的。我认为在继续之前要知道这一点很重要。另外,我认为在这种情况下,prewitt边缘检测可能更有用,因为噪声似乎更少: 如果您按以下方式预处理bin,则可以应用之前的分割方法,在这种情况下,您只需要计算一些训练样本后的黑色或白色像素数和阈值。     

要回复问题请先登录注册