2017年全国大学生电子设计竞赛(预测题)-腐蚀算法
来源:互联网 发布:java gridlayout用法 编辑:程序博客网 时间:2024/04/28 05:17
2017年全国大学生电子设计竞赛(预测题)-腐蚀算法
腐蚀
腐蚀是图像处理中形态学图像处理部分的内容,具体可参考数字图像处理(第三版)[冈萨雷斯]的第九章 形态学图像处理处理。
腐蚀算法的定义--(摘自“数字图像处理(第三版)[冈萨雷斯] ”)
实例--(摘自“数字图像处理(第三版)[冈萨雷斯] ”)
源码--(源自网络)
static int SearchCenter(unsigned int* x, unsigned int* y, const TARGET_CONDITION* condition, SEARCH_AREA* area ){unsigned int i, j, k;unsigned int FailCount=0;unsigned int SpaceX, SpaceY;COLOR_RGB rgb;COLOR_HLS hls;SpaceX = condition->WIDTH_MIN / 3; //X间隔SpaceY = condition->HEIGHT_MIN / 3; //Y间隔,将区域矩形化,便于处理for(i=area->Y_Start; i<area->Y_End; i+=SpaceY)//Y轴扫描{for(j=area->X_Start; j<area->X_End; j+=SpaceX)//X轴扫描{FailCount = 0;//累加器,用于对累加匹配的颜色成功个数for(k=0; k<SpaceX+SpaceY; k++){//这段代码先进行横向的X轴,Y轴的中点进行横向扫描,然后又以X轴的中点,Y轴移动进行竖向扫描if(k<SpaceX)//每分一块进行横向扫描ReadColor( j+k, i+SpaceY/2, &rgb );else//每分一块进行竖向扫描ReadColor( j+SpaceX/2, i+k-SpaceX, &rgb );RGB2HSL( &rgb, &hls );if(!ColorMatch( &hls, condition ))//颜色范围匹配FailCount++;if(FailCount>( (SpaceX+SpaceY) >> ALLOW_FAIL_PER ))//提高容错率break;}if(k == SpaceX+SpaceY){//腐蚀中心的表达式*x = j + SpaceX / 2;*y = i + SpaceY / 2;return 1;}}}return 0;}static int Corrode(unsigned int oldX, unsigned int oldY, const TARGET_CONDITION* condition, RESULT* result ){unsigned int Xmin, Xmax, Ymin, Ymax;unsigned int i;unsigned int FailCount=0;COLOR_RGB rgb;COLOR_HLS hls;for(i=oldX; i>IMG_X; i--){ReadColor(i, oldY, &rgb);RGB2HSL(&rgb, &hls);if(!ColorMatch(&hls, condition))FailCount++;if(FailCount>(((condition->WIDTH_MIN+condition->WIDTH_MAX)>>2)>>ALLOW_FAIL_PER))break;}Xmin=i;FailCount=0;for(i=oldX; i<IMG_X+IMG_W; i++){ReadColor(i, oldY, &rgb);RGB2HSL(&rgb, &hls);if(!ColorMatch(&hls, condition))FailCount++;if(FailCount>(((condition->WIDTH_MIN+condition->WIDTH_MAX)>>2)>>ALLOW_FAIL_PER))break;}Xmax=i;FailCount=0;for(i=oldY; i>IMG_Y; i--){ReadColor(oldX, i, &rgb);RGB2HSL(&rgb, &hls);if(!ColorMatch(&hls, condition))FailCount++;if(FailCount>(((condition->HEIGHT_MIN+condition->HEIGHT_MAX)>>2)>>ALLOW_FAIL_PER))break;}Ymin=i;FailCount=0;for(i=oldY; i<IMG_Y+IMG_H; i++){ReadColor(oldX, i, &rgb);RGB2HSL(&rgb, &hls);if(!ColorMatch(&hls, condition))FailCount++;if(FailCount>(((condition->HEIGHT_MIN+condition->HEIGHT_MAX)>>2)>>ALLOW_FAIL_PER))break;}Ymax=i;FailCount=0;result->x = (Xmin + Xmax) / 2;result->y = (Ymin + Ymax) / 2;result->w = (Xmax - Xmin);result->h = (Ymax - Ymin);if( (result->w > condition->WIDTH_MIN) && (result->w < condition->WIDTH_MAX) &&(result->h > condition->HEIGHT_MIN) && (result->h < condition->HEIGHT_MAX) )return 1;elsereturn 0;}int Trace(const TARGET_CONDITION* condition, RESULT* result_final){unsigned int i;static unsigned int x0, y0, Flag = 0;static SEARCH_AREA area = {IMG_X, IMG_X+IMG_W, IMG_Y, IMG_Y+IMG_H};RESULT result;if(Flag == 0){if(SearchCenter(&x0, &y0, condition, &area)){Flag = 1;}else{area.X_Start = IMG_X;area.X_End = IMG_X+IMG_W;area.Y_Start = IMG_Y;area.Y_End = IMG_Y+IMG_H;if(SearchCenter(&x0, &y0, condition, &area)){Flag = 0;return 0;}}}result.x = x0;result.y = y0;for(i=0; i<ITERATER_NUM; i++){Corrode(result.x, result.y, condition, &result);}if( Corrode(result.x, result.y, condition, &result) ){x0 = result.x;y0 = result.y;result_final->x = result.x;result_final->y = result.y;result_final->w = result.w;result_final->h = result.h;Flag = 1;area.X_Start = result.x - ((result.w)>>1);area.X_End = result.x + ((result.w)>>1);area.Y_Start = result.y - ((result.h)>>1);area.Y_End = result.y + ((result.h)>>1);return 1;}else{Flag = 0;return 0;}}
阅读全文
0 0
- 2017年全国大学生电子设计竞赛(预测题)-腐蚀算法
- 2017年全国大学生电子设计竞赛(预测题)-RGB转HSL
- 2017年全国大学生电子设计竞赛(预测题)-单一物体识别
- 2017年全国大学生电子设计竞赛 猜题了
- 2017年全国大学生电子设计竞赛K题报告
- 2017 年全国大学生电子设计竞赛试题(M 题)
- 2017年全国大学生电子设计竞赛 参赛回忆
- 2017年全国大学生电子设计竞赛获奖名单
- 2017年全国大学生电子设计竞赛湖南赛区获奖名单
- 2017年全国大学生电子设计竞赛河北省获奖名单
- 2015年全国大学生电子设计竞赛 F题:数字频率计
- 关于2017年全国大学生电子设计竞赛组委会给出的元器件清单的推测(仪器仪表类)
- 2017全国大学生电子设计竞赛赛后反思
- 2011年全国大学生电子设计竞赛总结
- 关于全国大学生电子设计竞赛
- 全国大学生电子设计竞赛历届题目
- 2011年全国大学生电子设计竞赛 E题: 简易数字信号传输性能分析仪
- 2015年全国大学生电子设计竞赛仪器和主要元器件清单
- OracleWeblogic12C安装教程和在IDEA部署WebLogic12C项目分享经验
- 轻松理解汉诺塔问题(图解java描述)
- str与repr的区别
- C#中的一个JSON库-LitJSON简介
- Springboot基础篇 (一)启动方式
- 2017年全国大学生电子设计竞赛(预测题)-腐蚀算法
- 扩展欧几里得求Ax+By=1的解
- 最大公约数和最小公倍数
- 一个好用的串口类(收发自如)
- 3DSlicer16:数据类型MRML
- I Hate It
- 20170808-selenium获取列表内容2
- QMutex pointer is misaligned 的问题
- mac os上编译vlc视频库的踩坑之旅