C# OCR中的图像预处理

C# OCR中的图像预处理,c#,image-processing,ocr,tesseract,image-preprocessing,C#,Image Processing,Ocr,Tesseract,Image Preprocessing,我目前正在做一个小项目,将扫描的PDF文档中的一些SIM卡数据自动导出到数据库表中。这些文件包括SIM卡号码、PIN 1/2和PUK 1/2 我正在使用C#和这个包装 我得到的结果还不错。。。但是我真的认为图像预处理可以改进 文档中有一些粉红色的元素,我通过计算像素颜色和参考颜色之间的距离来去除这些元素。我使用的是欧几里德sRGB方法,您可以找到 这里有一些图片让我的意思更清楚(模糊的部分是我不想在这里展示的别针和PUK) 对于任何感兴趣或正在寻找类似内容的人,请参阅以下代码: privat

我目前正在做一个小项目,将扫描的PDF文档中的一些SIM卡数据自动导出到数据库表中。这些文件包括SIM卡号码、PIN 1/2和PUK 1/2

我正在使用C#和这个包装

我得到的结果还不错。。。但是我真的认为图像预处理可以改进

文档中有一些粉红色的元素,我通过计算像素颜色和参考颜色之间的距离来去除这些元素。我使用的是欧几里德sRGB方法,您可以找到

这里有一些图片让我的意思更清楚(模糊的部分是我不想在这里展示的别针和PUK)

对于任何感兴趣或正在寻找类似内容的人,请参阅以下代码:

private static void RemoveColorSpaceRed(位图源,字节最大距离)
{
不安全的
{
BitmapData lockBits=source.lockBits(
新矩形(0,0,source.Width,source.Height),
ImageLockMode.ReadWrite,
来源:Pixel格式);
颜色参考=颜色。红色;
尝试
{
int bpp=Bitmap.GetPixelFormatSize(source.PixelFormat)/8;
int hip=锁定位。高度;
int wip=lockBits.Width*bpp;
字节*ptrpix=(字节*)lockBits.Scan0;
平行。对于(0,hip,y=>
{
字节*pixel=ptrpix+(y*lockBits.Stride);
对于(整数x=0;x<在制品;x=x+bpp)
{
字节r=像素[x+2];
字节g=像素[x+1];
字节b=像素[x];
//计算三维颜色空间距离。
//低距离意味着更高的相似性
//使用参考颜色。
int距离=(int)(Math.Sqrt(Math.Pow)(reference.R-R,2)+
数学功率(参考G-G,2)+
(参考文献B-B,2));
如果(距离)
{
字节*pixel=ptrpix+(y*lockBits.Stride);
对于(整数x=0;x<在制品;x=x+bpp)
{
浮点平均值=((像素[x+2]&0xff)/256f+
(像素[x+1]&0xff)/256f+
(像素[x]&0xff)/256f)/3;
平均值=数学最小值(1.0华氏度,0.35华氏度+0.65华氏度*平均值);
if(平均值<阈值){
像素[x]=0;
像素[x+1]=0;
像素[x+2]=0;
}
否则{
像素[x]=255;
像素[x+1]=255;
像素[x+2]=255;
}
}
});
源。解锁位(锁定位);
}
抓住
{
如果(源!=null)
{
源。解锁位(锁定位);
}
}
}
}