-
大小: 11KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-06-06
- 語言: C/C++
- 標(biāo)簽:
資源簡介
對(duì)于霍夫直線一直是應(yīng)用在圖片中,因此此種方法可以應(yīng)用在點(diǎn)云數(shù)據(jù)中。具體原理以及依賴的頭文件和主函數(shù)見鏈接:https://mp.csdn.net/console/editor/html/106173138
數(shù)據(jù)部分見鏈接:
代碼片段和文件信息
//HOUGH_LINE.cpp文件
#include?“HOUGH_LINE.h“
HOUGH_LINE::HOUGH_LINE()
{
}
HOUGH_LINE::~HOUGH_LINE()
{
cloud->clear();
result_.clear();
}
void?HOUGH_LINE::VoxelGrid_(float?size_?PointCloud::Ptr?&voxel_cloud)?//定義降采樣函數(shù)(常用略過)
{
PointCloud::Ptr?tem_voxel_cloud(new?PointCloud);
VoxelGrid?vox;
vox.setInputCloud(cloud);
vox.setLeafSize(size_?size_?size_);
vox.filter(*tem_voxel_cloud);
cloud?=?tem_voxel_cloud;
voxel_cloud?=?tem_voxel_cloud;
point_num?=?cloud->size();
}
//在霍夫空間里邊
void?HOUGH_LINE::draw_hough_spacing()?//定義繪制霍夫空間劃分函數(shù)
{
visualization::PCLPlotter?*plot_(new?visualization::PCLPlotter(“My?plotter“));//定義繪圖對(duì)象
plot_->setBackgroundColor(1?1?1);//設(shè)置圖形背景顏色(0,0,0)背景為黑色
plot_->settitle(“hough?space“);//設(shè)置整體標(biāo)題
plot_->setXtitle(“angle“);//設(shè)置X軸坐標(biāo)標(biāo)題記為角度
plot_->setYtitle(“rho“);//設(shè)置Y坐標(biāo)標(biāo)題記為ρ
vector>data_;//vector的元素類型是pair類型
double?x_resolution1?=?M_PI?/?181;//1度=Π/180;1弧度=180/Π(橫坐標(biāo)軸從0到180一共181個(gè)數(shù))
double?a_1?b_1;//將降采樣后點(diǎn)云數(shù)據(jù)的xy坐標(biāo)賦值給a_1b_1
for?(int?i_point?=?0;?i_point? {
a_1?=?cloud->points[i_point].x;
b_1?=?cloud->points[i_point].y;
for?(int?i?=?0;?i?181;?i++)
{
data_.push_back(make_pair(i*x_resolution1?a_1?*?cos(i*x_resolution1)?+?b_1?*?sin(i*x_resolution1)));//data_的元素存儲(chǔ)的是(θ,ρ)已知xyθ計(jì)算得到ρ
//訪問(輸出)存放在vector的成員(pair方式存在),便于觀察理解
//cout?< }
plot_->addPlotData(data_?“l(fā)ine“?vtkChart::LINE);//XY均為double型的向量;第一個(gè)參數(shù)多項(xiàng)式或者要繪制的函數(shù)(點(diǎn))、第二個(gè)曲線名稱、第三個(gè)繪制線
data_.clear();
}
//plot_->setShowLegend(false);//不顯示曲線名稱(也就是對(duì)應(yīng)上述addPlotData第二個(gè)參數(shù))
plot_->setShowLegend(true);//顯示曲線名稱
plot_->plot();//繪制曲線
}
//尋找極大值(首先根據(jù)xy還有劃分的0到180的θ,計(jì)算出每個(gè)xy點(diǎn)是落進(jìn)哪個(gè)格子里邊)
void?HOUGH_LINE::HOUGH_line(int?x_setp_num?double?y_resolution?int?grid_point_number_threshold?vector&K_?vector&B_?int?line_num)?
{
vector>all_point_row_col;//所有的行列數(shù)
vector?Grid_Index;
getMinMax3D(*cloud?point_min?point_max);//獲取點(diǎn)云中的最大最小值XYZ
//觀察一下輸出的最大值xy分別是多少
//cout?<“(“< double?x_resolution?=?M_PI?/?x_setp_num;//Π/181(x軸的分辨率)
int?raster_rows?raster_cols;//柵格行,列
raster_rows?=?ceil((M_PI?-?0)?/?x_resolution);//相當(dāng)于等于x_setp_num=181
//查看一下輸出的行有多少行
//cout?<“行數(shù):“< raster_cols?=?ceil((point_max.y?+?point_max.x)?/?y_resolution)?*?2;//y_resolution=0.5
//查看一下輸出的列有多少列
//cout?<“列數(shù):“< MatrixXi?all_row_col(raster_cols?raster_rows);//存儲(chǔ)每個(gè)格網(wǎng)內(nèi)的個(gè)數(shù)?//是個(gè)矩陣raster_cols矩陣行數(shù)、?Xi表示元素是int類型?
all_row_col.setZero();//將這個(gè)表達(dá)式中所有數(shù)設(shè)為0
//查看一下這步定義的是啥?
//cout?<“setZero之后的all_row_col:“?<????//下邊輸出2970,181,537570
//cout?<“all_row_col?“?<“rows=“?< MatrixXd?all_row_col_mean(raste
評(píng)論
共有 條評(píng)論