文字图像与自然照片图像识别

vollin 2008-03-13 09:44:30
文字图像和自然照片图像在直观上,或者在色彩直方图上都可以很直观的看出来。
有没有一个简单的参数,分辨率也高?可以非常简单的判断一个图像是一个文档图像还是一个自然照片图像?
...全文
304 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
vollin 2008-03-15
  • 打赏
  • 举报
回复
哦,原来是直线度。这个好像没什么用吧。不过也感谢了。
谢谢大家。结帖了。
coolcoffee4051982 2008-03-15
  • 打赏
  • 举报
回复
不懂呀
用户 昵称 2008-03-15
  • 打赏
  • 举报
回复
我那个是以前的设计是这样的,比如算直线度,需要先输入零件长度,以及公差范围,然后通过传感器采集零件数据或手工输入或通过数据文件输入。

比如输入的数据为

*** 直线度 ***

零件公差:0.2
测量点数:10

原始数据:
R1=0.0
R2=2.0
R3=3.0
R4=6.0
R5=4.0
R6=1.0
R7=8.0
R8=7.0
R9=8.0
R10=8.0

会算出公差为直线度误差8.55,结论不合格。


下面是源程序,不过是VB的

'2.计算直线度误差
Public Sub CalculateZhiXianDu()
Dim x() As Double
Dim RL() As Double
Dim Rmax As Double, Rmin As Double
Dim a As Double, b As Double
Dim i As Integer
Dim fi As Double
Dim SgmXiYi As Double, SgmXi2 As Double, SgmYi As Double
Dim SCL As Double
Dim SCL2 As Double
Dim Wucha As Double
Dim t As Double, Alpha As Double

'输出原始数据
Form1.Text1.Text = " *** 直线度 ***" & vbCr & vbLf & vbCr & vbLf
Form1.Text1.Text = Form1.Text1.Text & " 零件公差:" & Format(fGongCha, fm) & vbCr & vbLf
Form1.Text1.Text = Form1.Text1.Text & " 测量点数:" & iNumOfPoints & vbCr & vbLf & vbCr & vbLf
Form1.Text1.Text = Form1.Text1.Text & " 原始数据:" & vbCr & vbLf
For i = 1 To iNumOfPoints
Form1.Text1.Text = Form1.Text1 + " R" & i & "=" & Format(fLineData(i), fm) & vbCr & vbLf
Next i

SCL = 300 / fTotalLen

ReDim x(1 To iNumOfPoints)
ReDim RL(1 To iNumOfPoints)

CalculateXi x, fTotalLen, iNumOfPoints

Alpha = Atn(fLineData(iNumOfPoints) / x(iNumOfPoints))
For i = 1 To iNumOfPoints
t = x(i)
x(i) = x(i) * Cos(Alpha) + fLineData(i) * Sin(Alpha)
fLineData(i) = fLineData(i) * Cos(Alpha) - t * Sin(Alpha)
Next i

For i = 1 To iNumOfPoints
SgmXiYi = SgmXiYi + x(i) * fLineData(i)
SgmXi2 = SgmXi2 + x(i) * x(i)
SgmYi = SgmYi + fLineData(i)
Next i

a = SgmXiYi / SgmXi2 / 1000
b = SgmYi / iNumOfPoints

'计算各点到理想直线的偏差 RL(i)

For i = 1 To iNumOfPoints
RL(i) = fLineData(i) - a * x(i) - b
Next i

'找出两极值
MaxMin RL, iNumOfPoints, Rmax, Rmin

'计算误差
Wucha = Rmax - Rmin

If Wucha > 0 Then SCL2 = 20 / Wucha Else SCL2 = 1
Form1.picMain.Cls
DrawArrow ToX(-150), ToY(0), ToX(150), ToY(0), vbBlack, True
DrawArrow ToX(0), _
ToY(-Form1.picMain.ScaleHeight / 4), _
ToX(0), _
ToY(Form1.picMain.ScaleHeight / 4), vbBlack, False

Form1.picMain.PSet (ToX(x(1) * SCL), ToY(fLineData(1) * SCL2))
For i = 2 To iNumOfPoints
Form1.picMain.Line -(ToX(x(i) * SCL), ToY(fLineData(i) * SCL2)), vbRed
Next i


'画出直线 y=ax+b 及包容直线
Form1.picMain.Line (ToX(x(1) * SCL), ToY((x(1) * a + b) * SCL2)) _
-(ToX(x(iNumOfPoints) * SCL), ToY((x(iNumOfPoints) * a + b) * SCL2)), vbRed
Form1.picMain.Line (ToX(x(1) * SCL), ToY((x(1) * a + b + Rmax) * SCL2)) _
-(ToX(x(iNumOfPoints) * SCL), ToY((x(iNumOfPoints) * a + b + Rmax) * SCL2)), vbRed

Form1.picMain.Line (ToX(x(1) * SCL), ToY((x(1) * a + b + Rmin) * SCL2)) _
-(ToX(x(iNumOfPoints) * SCL), ToY((x(iNumOfPoints) * a + b + Rmin) * SCL2)), vbRed

'标注误差
Form1.picMain.Line (ToX(100), ToY(-40))-Step(0, -80), vbRed
Form1.picMain.Line -Step(50, 0), vbRed
With Form1.picMain
.FontSize = 12
.CurrentX = .CurrentX - .TextWidth("0.02")
.CurrentY = .CurrentY - .TextHeight("0")
End With
Form1.picMain.Print Format(Wucha, fm)
Form1.picMain.Line (ToX(100), ToY((100 / SCL * a + b + Rmax) * SCL2))-Step(-2, -10), vbRed
Form1.picMain.Line (ToX(100), ToY((100 / SCL * a + b + Rmax) * SCL2))-Step(2, -10), vbRed
Form1.picMain.Line (ToX(100), ToY((100 / SCL * a + b + Rmin) * SCL2))-Step(-2, 10), vbRed
Form1.picMain.Line (ToX(100), ToY((100 / SCL * a + b + Rmin) * SCL2))-Step(2, 10), vbRed

'输出结论
Form1.picMain.FontSize = 22
Form1.picMain.CurrentX = 250
Form1.picMain.CurrentY = Form1.picMain.ScaleHeight - 120
Form1.picMain.Print "直线度误差: " & Format(Wucha, fm)
Form1.picMain.CurrentY = Form1.picMain.CurrentY + 20
Form1.picMain.CurrentX = 250
Form1.picMain.Print IIf(Wucha > fGongCha, "零件不合格", "零件合格")
End Sub


由于不是一个人做的程序,算法更是导师提供的,又过了好多年了,已经全忘了。
用户 昵称 2008-03-15
  • 打赏
  • 举报
回复
不是吊你,是因为我实在不懂,等我看看。
vollin 2008-03-15
  • 打赏
  • 举报
回复
我其实本打算这样实现,
1,变成256级灰度图像;
2,统计每一级的像素数;
3,如果有一级的像素数达到总像素的50%,或某两级的像素达到80%,或某三级的像素达到90%以上;就判断为文档图像。
这样基本可以解决一般黑白文档,以及红头文件文档,还有存在批注的文档的问题。

但如果有完善的判断方法,也请不吝赐教。
vollin 2008-03-15
  • 打赏
  • 举报
回复
jennyvenus :
兄台,送佛送到西啊。别说一半落一半的。让人心好痒啊。
给篇文章看看。

“自然图像的直方图所形成的曲线比较平滑”如何用什么“平面度”来表现?
说细一点,感谢!!
用户 昵称 2008-03-14
  • 打赏
  • 举报
回复
俺是说没有简单。
vcPlayer 2008-03-14
  • 打赏
  • 举报
回复
合成一个参数的话,考虑方差!(统计学里面有很多可以做的:期望、方差、矩……都可以用。)
beyondtkl 2008-03-14
  • 打赏
  • 举报
回复
gz & xuexi
laoma_hbu 2008-03-14
  • 打赏
  • 举报
回复
如果是我可能会从两方面做:
一、是纹理,这里的纹理和指纹的纹理不太一样,主要是指文字行的走向,对于文字图像通常按行排版可以得到其代表文字行走向的直线或曲线,对于自然图像存在这种水平或垂直线条的概率应该不大;
二、就是从直方图像考虑,如三楼所说的那样"文字图像的直方图分布一般较集中于两点,而自然图像的直方图分布一般较均衡";
daidongsheng 2008-03-14
  • 打赏
  • 举报
回复
你看下这个,我以前写的,里面有惯性矩的求法,时间很久我也忘的差不多了,你也可以找找相关论文
http://hi.baidu.com/%C1%E8%D4%C6%D7%B7%B7%E7/blog/item/2184954476b7eb83b2b7dcbb.html
vollin 2008-03-14
  • 打赏
  • 举报
回复
感谢各位大大的回复!
laoma_hbu :
自己如何判断呢?讲一下你的想法也行。
jennyvenus :
可能是不存在这样的参数,但应该总有办法判断吧?要不然OCR怎么做?
vcPlayer :
在色彩直方图上的确是存在两个柱状的高峰,不像其它照片图像都较为平滑。但是这个用什么统计参数可以将他们整合到一起形成一个参数呢?
daidongsheng :
灰度共生矩阵的惯性矩,这个具体怎么计算?我想试试。

daidongsheng 2008-03-14
  • 打赏
  • 举报
回复
灰度共生矩阵的惯性矩,以前做轮廓识别的时候用的,可以用来判断图像的复杂度
vcPlayer 2008-03-14
  • 打赏
  • 举报
回复
或者在色彩直方图上都可以很直观的看出来

文字图像的直方图分布一般较集中于两点;而自然图像的直方图分布一般较均衡。 结合统计学即可区分。不过这仅对常见的而言,也不能一概而论。
用户 昵称 2008-03-14
  • 打赏
  • 举报
回复
没有,近几十年之间也未必有。
laoma_hbu 2008-03-14
  • 打赏
  • 举报
回复
好像没有,得自己判断吧
Eleven 2008-03-14
  • 打赏
  • 举报
回复
Up
用户 昵称 2008-03-14
  • 打赏
  • 举报
回复
说的是类似“自然图像的直方图所形成的曲线比较平滑”
用户 昵称 2008-03-14
  • 打赏
  • 举报
回复
昨天突然发现俺毕业设计居然也有这方面的内容,当时是老师弄算法,俺们用VB实现,用最小二乘法算出的平面度应该类似吧。
vollin 2008-03-14
  • 打赏
  • 举报
回复
嗯,看样子需要复习一下统计。谢谢各位。
我再等两天如果没有更好的方法就结帖。

我还是想从直方图的数据下手,因为观察了一下,自然图像的直方图所形成的曲线比较平滑,
而文档有一个非常突出的就是有背景色几本上占了大部分的像素位置。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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