热度 10
2016-4-19 12:24
1075 次阅读|
0 个评论
前言:需要源代码的,请留言,或者去豆瓣【西西在冰城】的日记。这个代码还是有问题,第一次处理结果成功的,第二次在发送数据会有图像的偏移。原因是,fifo未清零。后续更改。 ------------------------------------遇到的问题: 数据读出时,一直在向上跑(解决) 数据读出时,数据在向斜上方跑 (解决) 原因,q输出的参数设置问题 图像显示阈值的设置在10-15左右(解决)sobel算法的问题 流水线和数据操作的方法(需要掌握) 多次写入的时候数据会发生偏移。(未解决) ------------------------------------sobel解释 计算机视觉领域的一种重要处理方法。主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。 ------------------------------------灰度图像 我们可以通过下面几种方法,将其转换为灰度: 1.浮点算法:Gray=R*0.3+G*0.59+B*0.11 2.整数方法:Gray=(R*30+G*59+B*11)/100 3.移位方法:Gray =(R*76+G*151+B*28)8; 4.平均值法:Gray=(R+G+B)/3; 5.仅取绿色:Gray=G; 通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。 ------------------------------------sobel术语的定义: (1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。 (2)边缘点:图像中具有坐标 ,且处在强度显著变化的位置上的点。 (3)边缘段:对应于边缘点坐标 及其方位 ,边缘的方位可能是梯度角。 ------------------------------------核心公式 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经纵向及横向边缘检测的图像,其公式如下: Gx Gy 图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。 G= (Gx * Gx + Gy * Gy)开平方 用以下公式计算梯度方向。 arctan(Gy/Gx) 如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。 ------------------------------------至芯教的方法 1 原始图像像素200*200的图片aaa.jpg 转化成200*200的8位宽的数组a, 2 计算:利用fifo,使数据每三行连续三个(a的高三位,只取R的3bit,扩展为6bit),然后与Gx,Gy做运算分别得到六位的sobel_x(有符号),和六位的sobel_y(有符号),然后将sobel_x和sobel_y的绝对值相加,得到六位的sobel_xy,为198*198 位宽为6位的数组b。 3 计算的条件:第三列传入才能开始做计算,所以本行最后一个数传入做计算以后,要等3个flag才能开始下一行的计算 4 有符号数,正数不变(最高位为0),负数取反加1(最高位为1), 5 边界扫描只有两个输出,就是00或者ff;阈值的设定关系到图片的精细度,5-20左右 6 fifo要注意清零 ------------------------------------代码 ----------工程架构 rx_module//(用于接收UART发送的信号,生成数据,送给fifo) fifo //将收到的数据,整理,转化成3行数据的输出,并给出有效flag compute//对收到的数据进行sobel计算 ram//8x198x198 用于存储计算完成的sobel_xy, vga// ----------信号关系(待整理) ------------------------------------结果