求救:一个复杂的简单问题(100分)

  • 主题发起人 主题发起人 冰冷的雨
  • 开始时间 开始时间

冰冷的雨

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个BMP中,已知存在一条直线段,怎么获得它的斜率?
复杂之处是:
1、线段的位置要靠程序确定(假设图中除了这条线段之外都是空白的);
2、线段是经过细化处理的,可能有断点;
3、线段的细化处理算法并不完善,处理后不一定是单像素的。
哪位高手能给出源码或算法?
 
这个问题比较难啊!如果能确定直线的起点和终点就好办了!
关注!
 
把不是空白的颜色找出来,做个线性回归。
如果不需要很精确,可以找具有一定距离的两个点,
不是很简单嘛。
 
求这条线段最最左边和最右边的两个点的x,y即可
 
谢谢楼上各位,不过我想爹你们没弄清我的意思。
按你们说的是很容易找到一条线段,可那只是原线段的近似线段,求出的斜率也不是
原线段的准确斜率啊(请注意第二、三个难点)
 
楼上的老兄说的对,主要是要确定直线上的两点,根据两点位置计算斜率。
“假设图中除了这条线段之外都是空白的”
一、上面这句话是比较关键的一点,因为在BMP的编码中,空白的地方好象都是用“0”表示的;
因此问题的首要步骤是搞清楚BMP图形格式编码规范,即BMP文件格式,这可以到网上找相关
的资料,或者用Delphi带的“Image Editor”自己研究一下,画一条直线,用“winhex”打
开,看一下他的数据格式;
二、“线段是经过细化处理的,可能有断点”,是否有断点并不重要,因为既然是直线,那么
用直线上的任意两点求的斜率都应该是一样的;
三、“线段的细化处理算法并不完善,处理后不一定是单像素的”,直线是“单色”或“多色”
都无所谓,因为既然其他地方是空白的,那么在编码数据中为“0”的点是空白点,而非“0”点
是直线上的点。
其实最重要的是这个BMP图片中只有一条直线,还是有多条直线,如果是多条直线,那么问题
就真的很复杂了。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1034102
 
我感觉你只能通过画线的时候来取得线的起始点和终止点,能画出这条线,你肯定能知道
线的起始和终止点。如果是画后就比较困难了。

 
http://www.gischina.com/maindoc/simchin/gisforum/format/
 
为什么在画线前,不保存它的信息呢,是你自己画的吗?
 
不好意思,这两天都没空上来。
其实我要处理的是一种固定格式的表格。我把它们扫描成BMP文件,并进行滤波、二值化和
细化处理,再用OCR技术对一些区域进行识别。
这个问题的目的是实现自动倾斜校正,国为表格的右上角有一固定方框,它周围都是空的,
如果把这一区域取下来,就可以看作一个简单的矩形框,通过计算该矩形边的斜率,可以
求出整个图像应该旋转的角度,从而实现自动倾斜校正。
哪位兄弟有好的办法?
 
把的有的点分成两组,用其中的一个进行线性回归,
因为这两级的回归线应该垂直。
 
jsxjd,能说详细点吗?
 
因为你共有四条线,每两条平行,平行的两条的斜率是一样。
但要考虑一下如何分组?
不管它如何细化,如何处理,用点去回归肯定不错。
 
请问“线性回归”的算法是怎么样的?
 
如果是我来干,我也许会比较坐标的rgb值,然后根据坐标来确立这条线.
 
那效率太低了吧
 
这个问题可以改成:在一幅扫描图像中如何找到一个特定的矩形?如果这个矩形是倾斜的,
如何求它的倾斜度?

请各大富翁帮帮我:(
 
从中任意取几个点,然后计算.......
应该有好多思路,
但是我怕想了帮你考虑了,最后又被你否定了。
 
后退
顶部