OpenCV:区域生长法实现

绪:
区域发展法是图像朋分方式的一种;
其是按照区域内像素点的相似性质;
本文本家儿要介绍:
区域发展法的根基思惟;关头问题;
算法实现流程;示例法式;

OpenCV:区域生长法实现

文章插图

需要这些哦
OpenCV 2410
方式/
1根基思惟:
区域发展法的根基思惟是:将具有相似性质的像素点归并到一路;
在每一个区域内起首要指定一个种子点作为发展的起点;
然后将种子点四周邻域的像素点与种子点进行比力 ,
对具有相似性质的点归并之后继续标的目的外发展 ,
直到没有知足前提的像素被包罗进来为止;
如许一个区域的发展就完当作了 。
下图是:发在PAMI上的LSD直线检测算法中的关头一步就是找line support regions.这个区域的查找就是操纵区域发展法例 , 发展的前提就是梯度的偏向角度;
图中第一张图是原始图像 , 第二张是计较梯度角度 , 第三张是按照梯度角度区域发展的成果 , 不异颜色就是一个区域发展成果 。

OpenCV:区域生长法实现

文章插图

2关头点在于:
①给定种子点(种子点若何拔取)
种子点的拔取良多时辰都采用人工交互的方式实现 ,
也有效其他体例的 , 好比寻找物体并提取物体内部点作为种子点 。
②确定在发展过程中能将相邻像素包罗进来的准则(相似性质准则)
灰度图像的差值;
彩色图像的颜色等等 。
都是关于像素与像素间的关系描述 。
③发展的遏制前提:
四连通与八连通

OpenCV:区域生长法实现

文章插图

3区域发展流程:
①给出种子点 , 这里一次给出一个种子点
②给出相似性准则 , 这里采用灰度差;
③将种子点与其八邻域像素点进行相似性比力;相似点则作为下次发展的种子点;
④遏制发展:八邻域内没有归并的像素点时 , 即没有新的种子点时 , 遏制 。
如图所示:

OpenCV:区域生长法实现

文章插图

4示例法式:
OpenCV没有自带区域发展函数;
为了申明区域是若何发展的 ,
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\core\core.hpp>
using namespace std; 
using namespace cv; 
void RegionGrowing(Mat srcImg,Mat& dstImg,Point pt,int thre)
{
       Point ptGrowing;//发展点像素坐标
       int nGrowLabel=0;//是否被标识表记标帜
       int startPtValue=https://vvvtt.com/article/0;//发展肇端点灰度值
       int currPtValue=https://vvvtt.com/article/0;//当前发展点灰度值
       //8邻域
       int mDir[8][2]={{-1,-1},{0,-1},{1,-1},{-1,0},{1,0},{-1,1},{0,1},{1,1}};
       vector<Point> growPtVec;//发展点仓库
       growPtVec.push_back(pt);//将初始发展点压入仓库

推荐阅读