




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字图像处理的书数不胜数。相关的方法,从直方图、卷积到小波、机器学习方面的方法也举不胜举。 OpenCV 库给我们提供了一整套图像存储、显示方法外,也集成了很多很多的图像、视频处理算法以及机器学习算法,以函数的形式提 供给我们使用。 然而在初学阶段,我们往往过分依赖于 OpenCV 中的那些库函数。 虽说 OpenCV 集成了很多高效算法,然而,毕竟不是无所不包。 OpenCV 中基础的算法有时会缺失,有时用起来不是很得心应手。 区域生长算法就是一例。 区域生长法,思路很简单:将一个图像中的一点作为种子,此种子会沿 8 邻域/4 邻域进行扩展,扩展具有一定限制(即差值不能过大, 当然你可以引入梯度这个概念,甚至二维偏导数),求出种子生长的最终结果。 把示例程序的几张结果发过来,何谓区域生长法,大家一看便知。 区域生长法对于较为均衡的背景中提取目标物而言,效果较为理想。与阈值法、边缘检测法孰优孰劣,俺笔力及精力有限,不进行比较 了。单从工程角度,区域生长法是统计闭合图形个数的基础。 这里自己写了一下这个程序的演示代码,只负责将背景同生长不上去的区域分开: cpp view plaincopy 1. #define INIT 0 2. #define SEED -1 3. #define CONT -2 4. #define INVAL -3 5. 6. int color_templ5*6*3 7. = 8. 0,0,0, 40,40,40, 80,80,80, 120,120,120,160,160,160, 200,200,200, 9. 76,0,13, 113,52,0, 127,91,0, 188,114,0, 203,140,68, 236,211,190, 10. 0,0,121, 93,0,158, 91,20,237, 255,61,255, 170,110,240, 200,161,245, 11. 38,88,0, 77,118,46, 66,130,98, 112,182,46, 118,197,124, 174,221,178, 12. 19,57,96, 10,98,163, 0,160,171, 0,242,255, 59,245,255, 139,247,255 13. ; 14. 15. class g_point 16. 17. public: 18. g_point(); 19. g_point(int x_i, int y_i); 20. g_point(int x_i, int y_i, int lbl_i); 21. public: 22. int x; 23. int y; 24. int lbl; /标签 25. ; 26. 27. g_point:g_point(int x_i, int y_i) 28. 29. x = x_i; 30. y = y_i; 31. lbl = SEED; 32. 33. 34. g_point:g_point() 35. 36. x = 0; 37. y = 0; 38. lbl = INIT; 39. 40. 41. g_point:g_point(int x_i, int y_i, int lbl_i) 42. 43. x = x_i; 44. y = y_i; 45. lbl = lbl_i; 46. 47. 48. void regionGrowth(IplImage* img, int* p_mat, int x_g, int y_g, int threshold_g) 49. 50. /常用变量: 51. int x; 52. int y; 53. int gradient = 0; 54. 55. 56. /设置前次边缘点 57. std:list cont_pts_pre; 58. std:list * pcont_pts_pre = 59. 60. 61. /设置边缘点 62. std:list cont_pts; 63. std:list * pcont_pts = 64. 65. 66. /种子点+边缘点 = 下次的种子点 67. /上次的边缘点 = 前次边缘点(用于下次减少点数) 68. cont_pts_pre.push_back(class g_point(x_g, y_g, CONT); 69. p_maty_g * img-width + x_g = SEED; 70. 71. std:list:iterator iter_cont; 72. std:list:iterator iter_prt; 73. std:list:iterator iter_swap; 74. 75. 76. 77. 78. while( !cont_pts_pre.empty() ) 79. 80. 81. 82. 83. /一轮生长 84. iter_cont = cont_pts_pre.begin(); 85. while(iter_cont != cont_pts_pre.end() 86. 87. x = (*iter_cont).x; 88. y = (*iter_cont).y; 89. / if( !(x-1width + (x-1) = INIT) 92. / 93. / gradient = (char*)(img-imageData + y*img-widthStep)x - 94. / (char*)(img-imageData + (y-1)*img-widthStep)x-1; 95. / if(abs(gradient) width + (x-1) = SEED; 99. / 100. / else /不满足阈值要求 101. / 102. / p_mat(y-1)*img-width + (x-1) = INVAL; 103. / 104. / 105. / 106. if( !(x-1width + (x-1) = INIT) 109. 110. gradient = (char*)(img-imageData + y*img-widthStep)x - 111. (char*)(img-imageData + (y)*img-widthStep)x-1; 112. if(abs(gradient) width + (x-1) = SEED; 116. 117. else /不满足阈值要求 118. 119. p_mat(y)*img-width + (x-1) = INVAL; 120. 121. 122. 123. 124. / if( !(x-1= img-height) ) /#3 125. / 126. / if(p_mat(y+1)*img-width + (x-1) = INIT) 127. / 128. / gradient = (char*)(img-imageData + y*img-widthStep)x - 129. / (char*)(img-imageData + (y+1)*img-widthStep)x-1; 130. / if(abs(gradient) width + (x-1) = SEED; 134. / 135. / else /不满足阈值要求 136. / 137. / p_mat(y+1)*img-width + (x-1) = INVAL; 138. / 139. / 140. / 141. / 142. if( !(y+1 = img-height) ) /#4 143. 144. if(p_mat(y+1)*img-width + (x) = INIT) 145. 146. gradient = (char*)(img-imageData + y*img-widthStep)x - 147. (char*)(img-imageData + (y+1)*img-widthStep)x; 148. if(abs(gradient) width + (x) = SEED; 152. 153. else /不满足阈值要求 154. 155. p_mat(y+1)*img-width + (x) = INVAL; 156. 157. 158. 159. / if( !(x+1=img-width | y+1=img-height) ) /#5 160. / 161. / if(p_mat(y+1)*img-width + (x+1) = INIT) 162. / 163. / gradient = (char*)(img-imageData + y*img-widthStep)x - 164. / (char*)(img-imageData + (y+1)*img-widthStep)x+1; 165. / if(abs(gradient) width + (x+1) = SEED; 169. / 170. / else /不满足阈值要求 171. / 172. / p_mat(y+1)*img-width + (x+1) = INVAL; 173. / 174. / 175. / 176. / 177. if( !(x+1=img-width) ) /#6 178. 179. if(p_mat(y)*img-width + (x+1) = INIT) 180. 181. gradient = (char*)(img-imageData + y*img-widthStep)x - 182. (char*)(img-imageData + (y)*img-widthStep)x+1; 183. if(abs(gradient) width + (x+1) = SEED; 187. 188. else /不满足阈值要求 189. 190. p_mat(y)*img-width + (x+1) = INVAL; 191. 192. 193. 194. 195. / if( !(x+1=img-width | y-1width + (x+1) = INIT) 198. / 199. / gradient = (char*)(img-imageData + y*img-widthStep)x - 200. / (char*)(img-imageData + (y-1)*img-widthStep)x+1; 201. / if(abs(gradient) width + (x+1) = SEED; 205. / 206. / else /不满足阈值要求 207. / 208. / p_mat(y-1)*img-width + (x+1) = INVAL; 209. / 210. / 211. / 212. / 213. if( !(y-1width + (x) = INIT) 216. 217. gradient = (char*)(img-imageData + y*img-widthStep)x - 218. (char*)(img-imageData + (y-1)*img-widthStep)x; 219. if(abs(gradient) width + (x) = SEED; 223. 224. else /不满足阈值要求 225. 226. p_mat(y-1)*img-width + (x) = INVAL; 227. 228. 229. 230. 231. iter_cont +; 232. 233. 234. /将 cont_pts 中的点赋给 cont_pts_pre 235. cont_pts_pre.clear(); 236. iter_swap = cont_pts.begin(); 237. while(iter_swap != cont_pts.end() ) 238. 239. cont_pts_pre.push_back(*iter_swap); 240. iter_swap +; 241. 242. cont_pts.clear(); 243. 244. 245. 246. /结束 while 247. 248. 249. 250. 251. cont_pts_pre.clear(); 252. cont_pts.clear(); 253. 254. / delete pseed_pts; 255. / delete pcont_pts_pre; 256. / delete pcont_pts; 257. 258. 259. 260. void display_mat(int * p_mat, int width, int height) 261. 262. IplImage* disp; 263. disp = cvCreateImage( cvSize(width, height), 8, 3 ); 264. cvZero(disp); 265. 266. for(int h = 0; h imageData + h*disp-widthStep)w*3 + 0 = color_templ0*18 + 0*3 + 0; 273. (UCHAR *)(disp-imageData + h*disp-widthStep)w*3 + 1 = color_templ0*18 + 0*3 + 1; 274. (UCHAR *)(disp-imageData + h*disp-widthStep)w*3 + 2 = color_templ0*18 + 0*3 + 2; 275. 276. else if(p_math * width + w = INIT) 277. 278. (UCHAR *)(disp-imageData + h*disp-widthStep)w*3 + 0 = color_templ0*18 + 2*3 + 0; 279. (UCHAR *)(disp-imageData + h*disp-widthStep)w*3 + 1 = color_templ0*18 + 2*3 + 1; 280. (UCHAR *)(disp-imageData + h*disp-widthStep)w*3 + 2 = color_templ0*18 + 2*3 + 2; 281. 282. else if(p_math * width + w = INVAL) 283. 284. (UCHAR *)(disp-imageData + h*disp-widthStep)w*3 + 0 = color_templ0*18 + 4*3 + 0; 285. (UCHAR *)(disp-imageData + h*disp-widthStep)w*3 + 1 = color_templ0*18 + 4*3 + 1; 286. (UCHAR *)(disp-imageData + h*disp-widthStep)w*3 + 2 = color_templ0*18 + 4*3 + 2; 287. 288. 289. 290. cvNamedWindow(“display“); 291. cvShowImage(“display“, disp); 292. cvWaitKey(0); 293. 294. cvDestroyWindow(“display“); 295. cvReleaseImage( 296. 297. 298. 299. int _tmain(int argc, _TCHAR* argv) 300. 301. IplImage* img; 302. img = cvLoadImage(“1.bmp“, CV_LOAD_IMAGE_ANYCOLOR); 303. 304. 305. /建立需要使用的单通道 8 位深图像 306. IplImage* img_gray; 307. img_gray = cvCreateImage(cvGetSize(img), img-depth, 1); 308. cvSplit(img, NULL, img_gray, NULL, NULL); 309. 310. cvNamedWindow(“original image“, -1); 311. cvShowImage(“original image“, img_gray); 312. cvWaitKey(0); 313. 314. /建立所需的与图像同样宽高的整型数矩阵并赋初值 315. int * pres_mat; 316. pres_mat = new intimg_gray-width * img_gray-height; 317. for(int i = 0; i width * img_gray-height; i+) 318. 319. pres_mati = INIT; 320. 321. 322. /开始进行区域生长 323. regionGrowth(img_gray, pres_mat, 1, 1, 50); 324. 325. display_mat(pres_mat, img_gray-width, img_gray-height); 326. 327. return 0; 328. regionGrowth 函数详解 参数: img:需要进行区域生长的图像,8 位单通道的 IplImage p_map:整型数矩阵指针,宽高与图像相同,用于储存图像生长结果 矩阵已经被全部赋值为 INIT(#define INIT 0) x_g, y_g 区域生长初始种子点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电瓶车电池安全知识培训课件
- 北京中考体育机考试题及答案
- 高炉炼铁安全知识培训课件
- Hesperidin-methylchalcone-Standard-生命科学试剂-MCE
- 1-2-Dilauroyl-sn-glycerol-Standard-生命科学试剂-MCE
- 北服广告传播考试流程及答案
- 大一宪法考试题及答案
- 级考试题及答案
- 电热毯相关知识培训内容课件
- 电源院设计知识培训课件
- 2025年事业单位招聘考试卫生类中医学专业知识试卷(精神科)
- 小学一年级综合实践活动教案
- 《运营管理》考试试卷及参考答案(很全很标准)
- 浪浪山开学教案1
- 柚子树栽培技术
- 2025年北京市公安机关人民警察特殊职位公务员招录考试(网络技术)历年参考题库含答案详解(5套)
- 行为面试法培训课件
- X射线电离辐射安全知识培训课件
- 医院洁净手术部建筑技术规范
- 上腔静脉综合征护理查房
- 《机械创新设计》课件-k第七章-机械结构设计与创新
评论
0/150
提交评论