如何识别图象?(100分)

  • 主题发起人 主题发起人 杨欢
  • 开始时间 开始时间

杨欢

Unregistered / Unconfirmed
GUEST, unregistred user!
现遇到一难题,向各位请教:
首先在Canvas上作出图象(上有很多未填充的小圆圈,四个角区域有四个已涂黑的圆圈,每个圆圈的位置、大小已定),然后打印,在某些空白圆圈上涂黑后扫描进来,在这一过程中,扫描进来的图象已经与原来Canvas上的图象不一样(主要指各圆圈的具体位置以及圆的大小),请问如何判定四个角区域四个已涂黑的圆圈现在的具体位置,包括圆心、半径?因为知道了这四点,就可以推出其他各点现在的位置。
 
好难! 关注此问题。
 
如果要求的精度不太高(比如误差在一个象素左右),
这个问题应该不太难,稍有图象处理专业知识的程序
员都应该做得出来,当然业余的有问题了.

基本思想是:作一次二值化,对黑象素进行一次区域标注,
计算每个区域的面积/主轴/质心,根据这些参数可以找到
需要的圆.面积很好求,主轴/质心都有现成的公式,可以
在图象处理的书上找到.
至于各参数的使用方式和使用次序,就要根据实际应用定
了.一般可以用面积进行排除,只有面积适中的区域才可
能是候选的区域.根据主轴可以确定形状是否接近圆.质心
位置可以确定圆是否在四角,而且是圆心的一个较好的近似.

当然,如果噪声很小,可以在二值化和区域标注后直接从边
界往里收缩,在四角最先碰到的区域就是所求区域.根据我
的经验,这样做几乎是不可行的,一般的应用都有一定的噪
声点.

当然了,问题肯定比这里说的复杂.根据不同的应用,可能要
采用不同的二值化方法,并对面积/主轴/质心等参数有不同
的使用方法.有时,二值化的效果很不理想,在二值化还要进
行复杂的预处理.这些问题都是工程实现的问题,在教科书上
是找不到的,也不可能在这里讨论出一个好的结果,完全靠自
己的经验了.如果是图象处理的专业人员,应该不太困难.
 
如果不考虑杂质的影响. 可以这么做.
从上往下整行扫描图象, 遇到第一个黑点就可以认为碰到的是左上角或者右上角黑圈. 用第三种颜色
(比如红色)充填黑色区(把一个黑圈变成红圈), 继续扫描直到遇到第二个黑色点, 判断它的x坐标
与红圈x坐标, 就可以区分出红圈是左上角还是右上角了. 从下往上扫描可以判断出左下角和右下
角圆圈的坐标.

如果扫描时存在放大或者缩小了原图, 则可以再次扫描图象, 判断红色(刚才填的), 取到最长的
红线, 这就是圆圈的直径, 稍加计算就可以得到新图四个角圆圈的圆心坐标与半径了.
 
接受答案了.
 
后退
顶部