本文为算法的进度报告
链码是图像处理中一种很常用的表示线条的编码技术。根据Freeman链码原理指导,向链码表示方法做出新的压缩方法:以jpg图像为例,用压缩角度差链码读出图中每一条线条,将每种颜色线条分链储存,判断是否封闭,最后得到一组以多个线条链表组成的复式链表。我的任务是完成这个算法。
第一次接触图像处理技术,面对的一门崭新的技术,迷茫和困惑是常常有的,在李灵华老师的指导下,通过学习《图像处理技术入门》,为学习图像技术打开了知识的大门。从最先接触Windows位图bmp图像,对bmp进行显示、几何变化、做图像处理,到目前正在学习对真彩色图对图像进行处理。根据算法要求,写出简易伪代码方便代码编写,以下为伪代码。
算法伪代码:
struct jpgDATA{
DWORD RBG;
int Visited=0;
};
struct jpgHEADDATA{
WORD startcoordinate;
DWORD RBG;
jpgLINEDATA *line;
int closed=0;
jpgHEADDATA *next;
};
struct jpgLINEDATA{
jpgLINEDATA *line;
};
1.读出jpg图像;
2.转存图像信息,结构为(x+2)*(y+2)的数组(其中X为水平,Y为竖直,单位为像素点;+2是为了包围一圈空像素,作为边界),并所有Visited置为0;
3.定义头结点head=new jpgHEADDATA,p指向头结点;
循环:(从左上第1行第1列到第x行第y列){
寻找Visited为0点的i点,读取RBG值,Visited标记为1,入栈,
*q=new jpgHEADDATA;
p->next=q;
p=p->next;
p->RBG=i->RBG;
p->startcoordinate=i;
循环:(依次匹配q所在的八个方向的RBG值(RGB为-1代表边界)){
找到相同RBG:Visited为0:s=new jpgLINEDATA;q->line=s,q=q->next,入栈,Visited为1;
Visited为1:p->closed=1;s=new jpgLINEDATA;q->line=s,q=q->next,入栈,Visited为1;循环4.1
不相同:出栈
当出栈为P时结束循环
}
}