精华内容
下载资源
问答
  • 今天小编就为大家分享一篇关于Python 的简单栅格图像边界提取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 点云边界提取

    2017-08-15 14:52:49
    可以对txt格式的点云进行边界提取,包括内边界
  • 用二值形态学方法实现一幅二值图像的边界提取
  • BoundaryEstimation测试代码,有比较详细的注释。另外是附加了相关算法的一篇文献,对于理解这个函数比较有帮助
  • 基于车载激光点云的道路边界提取,方莉娜,杨必胜,车载激光扫描系统获取的道路环境点云数据量大、目标复杂,难以有效提取出道路的点云。本文通过分析道路边界的形状、强度,以及全
  • matlab函数用于图像边缘的提取,包含的方法有说soble算子
  • android手机APP 通过百度地图获取省市县的行政边界 行政边界结果保存在手机内存的“行政边界”文件夹下 行政边界的坐标是百度坐标,不是WGS84坐标
  • opencv图像边界提取

    2014-06-15 01:30:35
    基于opencv实现的图像的边界提取。运行平台为qtcreator2.2.2
  • 提出了一种建筑物LiDAR点云的屋顶边界提取方法。首先构建了离散的建筑物屋顶LiDAR点的 TIN模型,在TIN模型中根据点的空间几何关系,过滤整个三角网的边界线,从而过滤出初始边界点。在初始边界点构成的边界中,过滤...
  • 点云的边界提取

    热门讨论 2012-06-30 17:40:27
    能够将散乱的点云数据边界点及特征点提取出来,并显示。
  • 文中提出了一种新的二值图象边界提取算法。通过分析边界象素的特征,归纳出一个边界 象素提取算子,该算子最多只需要计算象素的 4 邻域象素,运算量小,速度快,运用他能直接提取 出二值图象的边界象素,得到单象素...
  • 边界提取(Region的边界提取

    千次阅读 2019-07-19 09:23:27
    边界提取不是轮廓(XLD)的提取,边界提取基于像素点。可通过腐蚀Region,再拿腐蚀前后的图像计算它们之间的差集即可得到Region的边界。 测试图: halcon代码: read_image (Image, 'D:/Halcon-WorkSpaces/...

    边界提取不是轮廓(XLD)的提取,边界提取基于像素点。可通过腐蚀Region,再拿腐蚀前后的图像计算它们之间的差集即可得到Region的边界。

    测试图:

    halcon代码:

    read_image (Image, 'D:/Halcon-WorkSpaces/Test/Image/test20.png')
    *二值分割
    binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
    *使用圆腐蚀
    erosion_circle (Region, RegionErosion, 5)
    *计算腐蚀前和腐蚀后两个区域的差集
    difference (Region, RegionErosion, RegionDifference)
    dev_display (Image)
    dev_display (RegionDifference)

    效果:

    展开全文
  • 点云边界提取方法总结

    千次阅读 2021-05-04 21:05:50
    } 法线估计法 可参考PCL:点云数据基于法线的边界提取(从最初的法线估计理论推导到最终的边界提取) #include #include #include #include #include #include #include #include #include #include #include #...

    经纬线扫描法

    经纬线扫描法的基本思想是:将经过坐标变换后的二维数据点集按照 x值的大小排序后存储在一个链表中,在二维平面建立点集的最小包围盒并分别计算出 x 和 y 的最大、最小值;令经线从 x 的最小值开始,取步长为dx,在 x 的取值范围内分别计算出每根经线的最大和最小 y 值,并将它们的索引值放在一个新建的链表中,扫描完整个 x 区间;同样的方法扫描纬线,最后将重复的索引值删掉。

    #include <iostream>
    #include <algorithm>
    #include <pcl/io/pcd_io.h>
    #include <pcl/point_types.h>
    
    void BoundaryExtraction(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_boundary, int resolution)
    {
    	pcl::PointXYZ px_min = *std::min_element(cloud->begin(), cloud->end(), [](pcl::PointXYZ pt1, pcl::PointXYZ pt2) {return pt1.x < pt2.x; });
    	pcl::PointXYZ px_max = *std::max_element(cloud->begin(), cloud->end(), [](pcl::PointXYZ pt1, pcl::PointXYZ pt2) {return pt1.x < pt2.x; });
    
    	float delta_x = (px_max.x - px_min.x) / resolution;
    	float min_y = INT_MAX, max_y = -INT_MAX;
    	std::vector<int> indexs_x(2 * resolution);
    	std::vector<std::pair<float, float>> minmax_x(resolution, { INT_MAX,-INT_MAX });
    	for (size_t i = 0; i < cloud->size(); ++i)
    	{
    		int id = (cloud->points[i].x - px_min.x) / delta_x;
    		if (cloud->points[i].y < minmax_x[id].first)
    		{
    			minmax_x[id].first = cloud->points[i].y;
    			indexs_x[id] = i;
    		}
    		else if (cloud->points[i].y > minmax_x[id].second)
    		{
    			minmax_x[id].second = cloud->points[i].y;
    			indexs_x[id + resolution] = i;
    		}
    	}
    
    	pcl::PointXYZ py_min = *std::min_element(cloud->begin(), cloud->end(), [](pcl::PointXYZ pt1, pcl::PointXYZ pt2) {return pt1.y < pt2.y; });
    	pcl::PointXYZ py_max = *std::max_element(cloud->begin(), cloud->end(), [](pcl::PointXYZ pt1, pcl::PointXYZ pt2) {return pt1.y < pt2.y; });
    
    	float delta_y = (py_max.y - py_min.y) / resolution;
    	float min_x = INT_MAX, max_x = -INT_MAX;
    	std::vector<int> indexs_y(2 * resolution);
    	std::vector<std::pair<float, float>> minmax_y(resolution, { INT_MAX,-INT_MAX });
    	for (size_t i = 0; i < cloud->size(); ++i)
    	{
    		int id = (cloud->points[i].y - py_min.y) / delta_y;
    		if (cloud->points[i].x < minmax_y[id].first)
    		{
    			minmax_y[id].first = cloud->points[i].x;
    			indexs_y[id] = i;
    		}
    		else if (cloud->points[i].x > minmax_y[id].second)
    		{
    			minmax_y[id].second = cloud->points[i].x;
    			indexs_y[id + resolution] = i;
    		}
    	}
    
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_xboundary(new pcl::PointCloud<pcl::PointXYZ>);
    	pcl::copyPointCloud(*cloud, indexs_x, *cloud_xboundary);
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_yboundary(new pcl::PointCloud<pcl::PointXYZ>);
    	pcl::copyPointCloud(*cloud, indexs_y, *cloud_yboundary);
    	*cloud_boundary = *cloud_xboundary + *cloud_yboundary;
    }
    
    int main(int argc, char** argv)
    {
    	clock_t start = clock();
    
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>), cloud_boundary(new pcl::PointCloud<pcl::PointXYZ>);
    	pcl::io::loadPCDFile("test.pcd", *cloud);
    	BoundaryExtraction(cloud, cloud_boundary, 200);
    
    	clock_t stop = clock();
    	double endtime = (double)(stop - start) / CLOCKS_PER_SEC;
    	std::cout << "time:" << endtime * 1000 << "ms" << std::endl;
    
    	pcl::io::savePCDFileBinary("boundary.pcd", *cloud_boundary);
    
    	system("pause");
    	return 0;
    }
    

    网格划分法

    网格划分法分为三个步骤:(1)网格划分(2)寻找边界网格(3)提取边界线。首先建立数据点集的最小包围盒,并用给定间隔的矩形网格将其分割;然后找出边界网格,将这些边界网格按顺序连接起来形成一条由边界网格组成的“粗边界”;再对每个边界网格按照某种规则判断其内的点是否为边界点,连接初始边界,并对此边界线进一步处理使其光滑。
    在这里插入图片描述
    在这里插入图片描述

    #include <iostream>
    #include <vector>
    #include <pcl/io/pcd_io.h>
    #include <pcl/point_types.h>
    #include <pcl/common/transforms.h>
    
    typedef pcl::PointCloud<pcl::PointXYZ> PointCloud;
    
    void BoundaryExtraction(PointCloud::Ptr cloud, PointCloud::Ptr cloud_boundary, int resolution)
    {
    	pcl::PointXYZ px_min = *std::min_element(cloud->begin(), cloud->end(), [](pcl::PointXYZ pt1, pcl::PointXYZ pt2) {return pt1.x < pt2.x; });
    	pcl::PointXYZ px_max = *std::max_element(cloud->begin(), cloud->end(), [](pcl::PointXYZ pt1, pcl::PointXYZ pt2) {return pt1.x < pt2.x; });
    	pcl::PointXYZ py_min = *std::min_element(cloud->begin(), cloud->end(), [](pcl::PointXYZ pt1, pcl::PointXYZ pt2) {return pt1.y < pt2.y; });
    	pcl::PointXYZ py_max = *std::max_element(cloud->begin(), cloud->end(), [](pcl::PointXYZ pt1, pcl::PointXYZ pt2) {return pt1.y < pt2.y; });
    	float x_min = px_min.x, x_max = px_max.x, y_min = py_min.y, y_max = py_max.y;
    
    	float L = sqrt((x_max - x_min)*(y_max - y_min) / resolution);
    	int x_num = (x_max - x_min) / L + 1;
    	int y_num = (y_max - y_min) / L + 1;
    	//std::cout << L << " " << x_num << " " << y_num << std::endl;
    
    	std::vector<std::vector<PointCloud::Ptr>> uv(x_num + 1, std::vector<PointCloud::Ptr>(y_num + 1));
    	for (int i = 0; i <= x_num; ++i)
    	{
    		for (int j = 0; j <= y_num; ++j)
    		{
    			PointCloud::Ptr ptcloud(new PointCloud);
    			uv[i][j] = ptcloud;
    		}
    	}
    	for (int i = 0; i < cloud->size(); ++i)
    	{
    		int x_id = (cloud->points[i].x - x_min) / L;
    		int y_id = (cloud->points[i].y - y_min) / L;
    		uv[x_id][y_id]->push_back(cloud->points[i]);
    	}
    
    	std::vector<std::vector<bool>> boundary_index(x_num + 1, std::vector<bool>(y_num + 1, false));
    	for (int i = 0; i <= x_num; ++i)
    	{
    		if (uv[i][0]->size())
    			boundary_index[i][0] = true;
    		if (uv[i][y_num]->size())
    			boundary_index[i][y_num] = true;
    	}		
    	for (int i = 0; i <= y_num; ++i)
    	{
    		if(uv[0][i]->size())
    			boundary_index[0][i] = true;
    		if (uv[x_num][i]->size())
    			boundary_index[x_num][i] = true;
    	}
    	for (int i = 1; i < x_num-1; ++i)
    	{
    		for (int j = 1; j < y_num-1; ++j)
    		{
    			if (uv[i][j]->size())
    			{
    				if (!uv[i - 1][j - 1]->size() || !uv[i][j - 1]->size() || !uv[i + 1][j - 1]->size() || !uv[i][j - 1]->size() ||
    					!uv[i + 1][j - 1]->size() || !uv[i + 1][j]->size() || !uv[i + 1][j + 1]->size() || !uv[i][j + 1]->size())
    					boundary_index[i][j] = true;
    			}
    		}
    	}
    
    	for (int i = 0; i <= x_num; ++i)
    	{
    		for (int j = 0; j <= y_num; ++j)
    		{
    			//std::cout << i << " " << j << " " << uv[i][j]->points.size() << std::endl;
    			if (boundary_index[i][j])
    			{
    				PointCloud::Ptr ptcloud(new PointCloud);
    				ptcloud = uv[i][j];
    				Eigen::Vector4f cloud_centroid;
    				pcl::compute3DCentroid(*ptcloud, cloud_centroid);
    				cloud_boundary->push_back(pcl::PointXYZ(cloud_centroid(0), cloud_centroid(1), cloud_centroid(2)));
    			}
    		}
    	}
    }
    
    int main(int argc, char** argv)
    {
    	clock_t start = clock();
    
    	PointCloud::Ptr cloud(new PointCloud), cloud_boundary(new PointCloud);
    	pcl::io::loadPCDFile("4icp5+6+icp_skeleton.pcd", *cloud);
    	BoundaryExtraction(cloud, cloud_boundary, 200*200);
    
    	clock_t stop = clock();
    	double endtime = (double)(stop - start) / CLOCKS_PER_SEC;
    	std::cout << "time:" << endtime * 1000 << "ms" << std::endl;
    
    	pcl::io::savePCDFile("boundary.pcd", *cloud_boundary);
    
    	system("pause");
    	return 0;
    }
    

    法线估计法

    可参考PCL:点云数据基于法线的边界提取(从最初的法线估计理论推导到最终的边界提取)

    #include <iostream>
    #include <vector>
    #include <ctime>
    #include <boost/thread/thread.hpp>
    #include <pcl/io/pcd_io.h>
    #include <pcl/visualization/pcl_visualizer.h>
    #include <pcl/console/parse.h>
    #include <pcl/features/eigen.h>
    #include <pcl/features/feature.h>
    #include <pcl/features/normal_3d.h>
    #include <pcl/features/normal_3d_omp.h>
    #include <pcl/impl/point_types.hpp>
    #include <pcl/features/boundary.h>
    #include <pcl/visualization/cloud_viewer.h>
    #include <pcl/filters/voxel_grid.h>
    using namespace std;
    
    int main(int argc, char **argv)
    {
    	clock_t start = clock();
    
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    	if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *cloud) == -1)
    	{
    		PCL_ERROR("COULD NOT READ FILE. \n");
    		return (-1);
    	}
    	//std::cout << "points size is:" << cloud->size() << std::endl;
    	
    	pcl::VoxelGrid<pcl::PointXYZ> voxel_grid;
    	voxel_grid.setLeafSize(std::stof(argv[2]), std::stof(argv[2]), std::stof(argv[2]));
    	voxel_grid.setInputCloud(cloud);
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
    	voxel_grid.filter(*cloud_filtered);
    	//std::cout << "filtered points size is:" << cloud_filtered->size() << std::endl;
    
    	pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
    	pcl::PointCloud<pcl::Boundary> boundaries;
    	pcl::BoundaryEstimation<pcl::PointXYZ, pcl::Normal, pcl::Boundary> est;
    	pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>());
    
    	//pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> normEst;  //其中pcl::PointXYZ表示输入类型数据,pcl::Normal表示输出类型,且pcl::Normal前三项是法向,最后一项是曲率
    	pcl::NormalEstimationOMP<pcl::PointXYZ, pcl::Normal> normEst;
    	normEst.setNumberOfThreads(12);  // 手动设置线程数,否则提示错误
    	normEst.setInputCloud(cloud_filtered);
    	normEst.setSearchMethod(tree);
    	normEst.setRadiusSearch(std::stof(argv[3]));  //法向估计的半径
    	 //normEst.setKSearch(9);  //法向估计的点数
    	normEst.compute(*normals);
    	//cout << "normal size is " << normals->size() << endl;
    
    	est.setInputCloud(cloud_filtered);
    	est.setInputNormals(normals);
    	est.setSearchMethod(tree);
    	est.setKSearch(500);  //一般这里的数值越高,最终边界识别的精度越好
    	est.compute(boundaries);
    
    	pcl::PointCloud<pcl::PointXYZ>::Ptr boundPoints(new pcl::PointCloud<pcl::PointXYZ>);
    	pcl::PointCloud<pcl::PointXYZ> noBoundPoints;
    	int countBoundaries = 0;
    	for (int i = 0; i<cloud_filtered->size(); i++) {
    		uint8_t x = (boundaries.points[i].boundary_point);
    		int a = static_cast<int>(x); //该函数的功能是强制类型转换
    		if (a == 1)
    		{
    			(*boundPoints).push_back(cloud_filtered->points[i]);
    			countBoundaries++;
    		}
    		else
    			noBoundPoints.push_back(cloud_filtered->points[i]);
    	}
    
    	clock_t stop = clock();
    	double endtime = (double)(stop - start) / CLOCKS_PER_SEC; 
    	std::cout << "time:" << endtime * 1000 << "ms" << std::endl;
    	std::cout << "boundary size is:" << countBoundaries << std::endl;
    	//pcl::io::savePCDFileASCII("boundary.pcd", *boundPoints);
    	//pcl::io::savePCDFileASCII("NoBoundpoints.pcd", noBoundPoints);
    	pcl::visualization::CloudViewer viewer("boundary");
    	viewer.showCloud(boundPoints);
    	while (!viewer.wasStopped())
    	{
    	}
    	return 0;
    }
    

    参考资料:点云的边界提取及角点检测算法研究

    展开全文
  • envi 水体边界提取

    万次阅读 2018-07-01 13:38:18
    最近做项目涉及到水体边界提取,鉴于时间关系,没有用太复杂的方法。这里记录两种相对简单的方法。方法1: 用水体指数提取水体,获得灰度图像 选择“Raster color slice”,结合真彩色图像,自定义水体提取分类...

    最近做项目涉及到水体边界提取,鉴于时间关系,没有用太复杂的方法。这里记录两种相对简单的方法。

    方法1:

        用水体指数提取水体,获得灰度图像

        选择“Raster color slice”,结合真彩色图像,自定义水体提取分类阈值,只分为水体一类就可以

        输出为shp文件

        在arcgis中打开,转为线状要素

        矢量编辑,提取边线

        将提取到的边线另存为shp文件

        转为面要素shp文件

    方法2:

        用水体指数提取水体,获得灰度图像

        采用滤波算子进行边缘增强处理,滤波器根据情况自己选取

        还是选择“Raster color slice”,根据边缘像素的灰度值自定义分类阈值,只分为边缘一类

        接下来的方法同上


    展开全文
  • 栅格边界提取

    2016-06-19 00:27:37
    影像边界提取原理介绍
  • 如图1 所示,图1 a为一幅简单的二值图像,经过边界提取后形成如图1 b 所示的图像,显示出了白色区域的轮廓。 2 边界提取算法 使用黑色提取,背景为白色,‘1’表示白色,‘0’表示黑色。 图2 二值图像边界提取...
  • Hough边界提取

    2016-12-03 10:30:49
    实现了 图像的hough边界提取
  • 数字图像的边界提取

    多人点赞 热门讨论 2021-06-09 22:47:04
    同时理解各种边界提取算子同时存在的必要性。对每一幅图均标出图题,并使图题的位置位于图的下方,居中,选择其中的一幅图,使其图题的字体为黑体,字号为14号。 imname='text.png' I=imread(imname); BW1=edge(I,...

    对于图像text.png,testpat1.png,coins.png用上面提到的六种方法分别提取边界并加以比较,对这三幅图像提取边界的结果,分别对每一幅图给出你的判断,认为哪种算子提取的边界最好?同时理解各种边界提取算子同时存在的必要性。对每一幅图均标出图题,并使图题的位置位于图的下方,居中,选择其中的一幅图,使其图题的字体为黑体,字号为14号。
    text.pngtestpat1.png
     coins.png

    imname='text.png'
    I=imread(imname);
    BW1=edge(I,'sobel');
    BW2=edge(I,'prewitt');
    BW3=edge(I,'roberts');
    BW4=edge(I,'log');
    BW5=edge(I,'zerocross');
    BW6=edge(I,'canny');
    imshow(I);
    text=strcat('图1:',imname,'原图')
    title(text,'fontsize',14,'fontname','黑体','position',[128,280,0]);
    figure;imshow(BW1);
    title('图2:sobel算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW2);
    title('图3:prewitt算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW3);
    title('图4:roberts算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW4);
    title('图5:log算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW5);
    title('图6:zerocross算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW6);
    title('图7:canny算子提取的边界','fontsize',14,'position',[128,280,0])
    

    在这里插入图片描述

    imname='testpat1.png'
    I=imread(imname);
    BW1=edge(I,'sobel');
    BW2=edge(I,'prewitt');
    BW3=edge(I,'roberts');
    BW4=edge(I,'log');
    BW5=edge(I,'zerocross');
    BW6=edge(I,'canny');
    imshow(I);
    text=strcat('图1:',imname,'原图')
    title(text,'fontsize',14,'fontname','黑体','position',[128,280,0]);
    figure;imshow(BW1);
    title('图2:sobel算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW2);
    title('图3:prewitt算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW3);
    title('图4:roberts算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW4);
    title('图5:log算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW5);
    title('图6:zerocross算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW6);
    title('图7:canny算子提取的边界','fontsize',14,'position',[128,280,0])
    

    在这里插入图片描述

    imname='coins.png'
    I=imread(imname);
    BW1=edge(I,'sobel');
    BW2=edge(I,'prewitt');
    BW3=edge(I,'roberts');
    BW4=edge(I,'log');
    BW5=edge(I,'zerocross');
    BW6=edge(I,'canny');
    imshow(I);
    text=strcat('图1:',imname,'原图')
    title(text,'fontsize',14,'fontname','黑体','position',[128,280,0]);
    figure;imshow(BW1);
    title('图2:sobel算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW2);
    title('图3:prewitt算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW3);
    title('图4:roberts算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW4);
    title('图5:log算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW5);
    title('图6:zerocross算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW6);
    title('图7:canny算子提取的边界','fontsize',14,'position',[128,280,0])
    

    在这里插入图片描述
    对于图像tire.tif,通过调整阈值的方法,得出一幅你认为较好的边界图,并给出此时的阈值。

    tire.tif

    I=imread('tire.tif');
    [BW1,th1]=edge(I,'canny',[0.05,0.2])
    th1str=num2str(th1);
    imshow(I);
    title('图1:rice.png原图','fontsize',14,'position',[128,280,0]);
    figure;
    imshow(BW1);
    ti='图8:sobel算子提取的边界,阈值为';
    ti=strcat(ti,th1str);title(ti,'fontsize',12,'position',[128,280,0])
    

    在这里插入图片描述
    对于图像snowflakes.png用上面提到的六种方法分别提取边界并加以比较,这次你认为那种算子提取的边界最好?

    在这里插入图片描述

    imname='snowflakes.png'
    I=imread(imname);
    BW1=edge(I,'sobel');
    BW2=edge(I,'prewitt');
    BW3=edge(I,'roberts');
    BW4=edge(I,'log');
    BW5=edge(I,'zerocross');
    BW6=edge(I,'canny');
    imshow(I);
    text=strcat('图1:',imname,'原图')
    title(text,'fontsize',14,'fontname','黑体','position',[128,280,0]);
    figure;imshow(BW1);
    title('图2:sobel算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW2);
    title('图3:prewitt算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW3);
    title('图4:roberts算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW4);
    title('图5:log算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW5);
    title('图6:zerocross算子提取的边界','fontsize',14,'position',[128,280,0])
    figure;imshow(BW6);
    title('图7:canny算子提取的边界','fontsize',14,'position',[128,280,0])
    

    在这里插入图片描述

    展开全文
  • 形态学图像处理之边界提取与跟踪

    千次阅读 2019-08-11 22:07:58
    边界提取         要在二值图像中提取物体的边界,容易想到的一个方法是将所有物体内部的点删除(置为背景色)。具体地说,可以逐行扫描图像,如果发现一个黑点的8个邻域都...
  • 边界提取

    2014-05-13 15:31:52
    很好的图啊,on个如果可以,大家给一个好的评价啊,谢谢大家,
  • 点云边界提取.rar

    2021-02-10 22:18:42
    基于PCL库,用C++语言实现的点云边界提取算法,内含:实现代码,实验数据和详细实现过程介绍的文章。
  • matlab对图像边界提取

    热门讨论 2011-05-20 09:25:37
    matlab对图像边界提取轮廓跟踪与提取 轮廓跟踪与提取
  • 平面点云的凹多边形边界提取
  • 边界提取采用PCL库里边的方法,基于法线估计来实现的边界检测与提取: 首先从原始点云上计算出法线,再由法线结合数据估计出边界。(这样解释还是特别抽像吧) ------------法线求解:(平面的法线是垂直于它的...
  • 针对现有的相似材料实验观测方法获取破裂区域信息效率低以及数据处理复杂的缺点,根据模型点云呈面分布的特征,提出一种图像辅助激光点云的相似材料模型破裂边界提取方法.将模型点云栅格化生成合成图像,并建立点云与...
  • 边界提取采用PCL库里边的方法,基于法线估计来实现的边界检测与提取: 首先从原始点云上计算出法线,再由法线结合数据估计出边界。(这样解释还是特别抽像吧) ------------法线求解:(平面的法线是垂直于它的...
  • PCL点云处理之边界提取算法原理代码效果优化最终效果 算法原理 算法原理在《散乱点云边界特征自动提取算法》论文中有具体介绍。 代码 #include <iostream> #include <pcl/console/parse.h> #include <...
  • 对二值图像进行边界提取,生成8方向的边界链码,可以求出各个链码元素出现的频率

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,488
精华内容 38,995
关键字:

边界提取