如何将 *.BMP 图像边缘转换到矢量数据,并能控制转换精度(200分)

  • 主题发起人 赵建东
  • 开始时间

赵建东

Unregistered / Unconfirmed
GUEST, unregistred user!
如一个园形图,只要把园边线的点阵图转换成矢量图数据,并且能控制矢量
数据的大小,像图形分辨有高低不同一样
 
最好是使用现成的软件, COREL DRAW 下的 COREL TRACE 很不错, 可以矢量化
线图, 色块图...

如果分辨率不高的话可以下载一个矢量化的 DEMO 软件

另外一个笨方法是直接用CAD软件将他描下来. 例如在ACAD下:
1. 创建一个新图
2. 将图像输入进来(BMPIN/GIFIN/TIFFIN...命令)
3. 将图像变比到实际尺寸
4. 在图像上方化矢量
 
举例:一个直角三角形的点阵图,笛卡尔坐标 (0,0),(30,0),(0,40)
要求矢量数据输出是: 如以 (0,0)到 (30,0)
(24,0),(3,0),(2,0),(1,0) 分段输出
原因是:外部设备虽然用步进马达,不易失真,可如果负荷重,下一步又要转弯,就回
失真,对策是提前减速,而外部设备一次处理一个(X,Y)数据,不能中途变速,
只能拆成几段,中间插入设备减速指令
 
为什么一定要用点阵图呢? 图样应该直接用CAD软件绘制出来对呀.

看看我寄给你的 dxf 显示程序, 很容易加上自己的绘图命令。能够直接绘制矢量图
是最好不过了。否则从点阵转换到矢量麻烦不说,精度也不会很高。此外那些图样
不会很复杂,如果能过作一些模板绘起来会很容易的。
 
好象赵先生需要的是一些插值算法,

直线段插值方法大致如下:

procedure DrawLine(x1, y1, x2, y2: integer);
var k, xt, yt: single;
dx: integer;
begin
xt := 1; //您的步进长度
if x2=x1 then begin
if y2 > y1 then dx := abs(dx)
else dx := -abs(dx)
yt := y1;
repeat
plot(x1, yt); // 您的设备驱动接口
... // 其他处理
yt := yt + dx;
until yt = y2;
end
else begin
k := (y2-y1) / (x2-x1);
if x2 > x1 then dx := abs(dx)
else dx := -abs(dx)
xt := x1;
repeat
yt := k * (xt-x1) + y1;
plot(xt, yt); // 您的设备驱动接口
... // 其他处理
xt := xt + dx;
until xt = x2;
end;
end;

圆弧和曲线有另外的的插值算法。

希望对您有所启示.
 
应是涉及两个算法:
1. 边缘判断算法:判断图像的边缘在位图上的位置坐标.
2.边缘跟踪算法:就是在图像的外面转一圈,同时进行矢量化

控制矢量的精度,同你所采用的矢量系统有关。
 
应是涉及两个算法:
1. 边缘判断算法:判断图像的边缘在位图上的位置坐标.
2.边缘跟踪算法:就是在图像的外面转一圈,同时进行矢量化

控制矢量的精度,同你所采用的矢量系统有关。
 
1: 把 *.BMP 图像矢量化,是想把老的手工绘制的图像转到,好容易编辑,移动,缩放等
2: 基本像 "pigprince"思路,补充: 如平面一张纸,中间打个洞,则矢量数据除
了纸的边缘外,还要中间洞的边缘的矢量数据
3: 由于外部设备只能接收 shortInt 格式,如果矢量数据溢出,则能分段输出,
故希望程序能参与矢量过程.
4: 精度: 0.01~0.025 mm 扫描仪光学精度能达到 300线,应该可满足要求
 
如果是你说的第2种情况,是在实心图的内部进行填充算法,
再次进行边缘算法.
如果只求简单不求速度可以用线扫描算法.
 
我可取得边缘点坐标后,想得到一个转换成矢量的算法源程序.
如一系列点在一定角度内,完全可用一条直线 Line(x1,y1,x2,y2)来完成,
好像把 点阵字体 扫描成 矢量轮廓字体的算法
 
sorry,技穷矣! ;(
 
推荐一本书你自己去啃吧, 里面有 C 语言的源码

C 环境下地图图像矢量化及图形编辑技术与实例

1993年
林春蔚 等编著
海洋出版社出版
ISBN 7-5027-3529-1 /TP.196
 
谢谢诸位,我将联系斑竹,把分数分该 "HuiZhand"和"PigPrince"兄.
可怜的我,没有回头路,如果以后成功,将回告大家.

 
我也正在研究这个问题,希望能和你交流
my email: yzsljh@elong.com
my oicq: 758339
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
I
回复
0
查看
667
import
I
顶部