图像处理之霍夫变换圆检测算法

上传人:艾力 文档编号:33721125 上传时间:2018-02-17 格式:DOCX 页数:12 大小:160.02KB
返回 下载 相关 举报
图像处理之霍夫变换圆检测算法_第1页
第1页 / 共12页
图像处理之霍夫变换圆检测算法_第2页
第2页 / 共12页
图像处理之霍夫变换圆检测算法_第3页
第3页 / 共12页
图像处理之霍夫变换圆检测算法_第4页
第4页 / 共12页
图像处理之霍夫变换圆检测算法_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《图像处理之霍夫变换圆检测算法》由会员分享,可在线阅读,更多相关《图像处理之霍夫变换圆检测算法(12页珍藏版)》请在金锄头文库上搜索。

1、 图像处理之霍夫变换圆检测算法一:霍夫变换检测圆的数学原理根据极坐标,圆上任意一点的坐标可以表示为如上形式, 所以对于任意一个圆, 假设中心像素点 p(x0, y0)像素点已知, 圆半径已知, 则旋转360 由极坐标方程可以得到每个点上得坐标同样,如果只是知道图像上像素点, 圆半径,旋转 360则中心点处的坐标值必定最强.这正是霍夫变换检测圆的数学原理.二:算法流程该算法大致可以分为以下几个步骤三:运行效果图像从空间坐标变换到极坐标效果, 最亮一点为圆心.图像从极坐标变换回到空间坐标,检测结果显示:四:关键代码解析个人觉得这次注释已经是非常的详细啦,而且我写的还是中文注释java view p

2、laincopy1. /* 2. * 霍夫变换处理 - 检测半径大小符合的圆的个数 3. * 1. 将图像像素从 2D 空间坐标转换到极坐标空间 4. * 2. 在极坐标空间中归一化各个点强度,使之在 0255 之间 5. * 3. 根据极坐标的 R 值与输入参数(圆的半径)相等,寻找 2D 空间的像素点 6. * 4. 对找出的空间像素点赋予结果颜色(红色) 7. * 5. 返回结果 2D 空间像素集合 8. * return int 9. */ 10. public int process() 11. 12. / 对于圆的极坐标变换来说,我们需要 360 度的空间梯度叠加值 13. acc

3、 = new intwidth * height; 14. for (int y = 0; y 0 & y0 0) 31. accx0 + (y0 * width) += 1; 32. 33. 34. 35. 36. 37. 38. / now normalise to 255 and put in format for a pixel array 39. int max = 0; 40. 41. / Find max acc value 42. for (int x = 0; x max) 46. max = accx + (y * width); 47. 48. 49. 50. 51. /

4、 根据最大值,实现极坐标空间的灰度值归一化处理 52. int value; 53. for (int x = 0; x 0 & y0 0) 71. accx0 + (y0 * width) += 1; 72. 73. 74. 75. 76. 77. 78. / now normalise to 255 and put in format for a pixel array 79. int max = 0; 80. 81. / Find max acc value 82. for (int x = 0; x max) 86. max = accx + (y * width); 87. 88.

5、89. 90. 91. / 根据最大值,实现极坐标空间的灰度值归一化处理 92. int value; 93. for (int x = 0; x results(accSize - 1) * 3) 117. 118. / add to bottom of array 119. results(accSize - 1) * 3 = value; /像素值 120. results(accSize - 1) * 3 + 1 = x; / 坐标 X 121. results(accSize - 1) * 3 + 2 = y; / 坐标 Y 122. 123. / shift up until it

6、s in right place 124. int i = (accSize - 2) * 3; 125. while (i = 0) & (resultsi + 3 resultsi) 126. for (int j = 0; j = 0; i-) 142. drawCircle(resultsi * 3, resultsi * 3 + 1, resultsi * 3 + 2); 143. 144. return output; 145. 146. 147. private void setPixel(int value, int xPos, int yPos) 148. / output(

7、yPos * width) + xPos = 0xff000000 | (value 16 | value 8 | value); 149. output(yPos * width) + xPos = 0xffff0000; 150. 151. 152. / draw circle at x y 153. private void drawCircle(int pix, int xCenter, int yCenter) 154. pix = 250; / 颜色值,默认为白色 155. 156. int x, y, r2; 157. int radius = r; 158. r2 = r *

8、r; 159. 160. / 绘制圆的上下左右四个点 161. setPixel(pix, xCenter, yCenter + radius); 162. setPixel(pix, xCenter, yCenter - radius); 163. setPixel(pix, xCenter + radius, yCenter); 164. setPixel(pix, xCenter - radius, yCenter); 165. 166. y = radius; 167. x = 1; 168. y = (int) (Math.sqrt(r2 - 1) + 0.5); 169. 170.

9、 / 边缘填充算法, 其实可以直接对循环所有像素,计算到做中心点距离来做 171. / 这个方法是别人写的,发现超赞,超好! 172. while (x y) 173. setPixel(pix, xCenter + x, yCenter + y); 174. setPixel(pix, xCenter + x, yCenter - y); 175. setPixel(pix, xCenter - x, yCenter + y); 176. setPixel(pix, xCenter - x, yCenter - y); 177. setPixel(pix, xCenter + y, yCen

10、ter + x); 178. setPixel(pix, xCenter + y, yCenter - x); 179. setPixel(pix, xCenter - y, yCenter + x); 180. setPixel(pix, xCenter - y, yCenter - x); 181. x += 1; 182. y = (int) (Math.sqrt(r2 - x * x) + 0.5); 183. 184. if (x = y) 185. setPixel(pix, xCenter + x, yCenter + y); 186. setPixel(pix, xCenter

11、 + x, yCenter - y); 187. setPixel(pix, xCenter - x, yCenter + y); 188. setPixel(pix, xCenter - x, yCenter - y); 189. 190. 191. 192. public int getAcc() 193. return acc; 194. 195. 196. 测试的 UI 类:java view plaincopy1. package com.gloomyfish.image.transform.hough; 2. 3. import java.awt.BorderLayout; 4.

12、import java.awt.Color; 5. import java.awt.Dimension; 6. import java.awt.FlowLayout; 7. import java.awt.Graphics; 8. import java.awt.Graphics2D; 9. import java.awt.GridLayout; 10. import java.awt.event.ActionEvent; 11. import java.awt.event.ActionListener; 12. import java.awt.image.BufferedImage; 13. import java.io.File; 14. 15. import javax.imageio.ImageIO; 16. import javax.swing.BorderFactory;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号