これは、pclファイルにエンコードされたrgb値をアンパックすることに関するものです。私はpclのドキュメントに記載された手順でこれを行いましたが、私が得た解凍されたrgb値はあまり正しくありません。私がそれらをRでプロットするとき、与えられた表現は実際の設定の色に対応していません(私はある程度、Rがプロットされた方法で問題がないと確信しています)。ポイントクラウドデータセットのRGB値のアンパック
たとえば、添付された画像では、境界区域の色はグレーとブルー(2つの椅子とテーブル)にする必要があります。でhttps://docs.google.com/open?id=0Bz5-HVcDiF6SanBZU0JWVmJwWHMとアンパックカラー値を持つ ファイル:https://docs.google.com/open?id=0Bz5-HVcDiF6SV2pYQ0xUbTAwVmM
ソースPCLファイルがで見つけることができます。
uint32_t rgbD = *reinterpret_cast<int*>(&kinectValue);
uint16_t rD = (rgbD >> 16) & 0x0000ff;
uint16_t gD = (rgbD >> 8) & 0x0000ff;
uint16_t bD = (rgbD) & 0x0000ff;
あなたは私が間違った場所に私が知っていることができれば、私は本当に感謝:また次は、cのカラー値を開梱プラスプラス設定するために使用されるコードです。
更新:
library(rgl)
pcd <- read.table(file.choose(),sep="")
names(pcd) <- c("x","y","z","r","g","b")
plot3d(pcd$x,pcd$y,pcd$z,col=rgb(pcd$r,pcd$g,pcd$b,maxColorValue=255))
更新:以下は、
Iは、3Dの値をプロットに使用されるRのコードスニペットである
後はCで、Iは、データを読み取るために使用されるコードであり、++ :
/*
Reads in a file from Kinect with unpacked color values, filter the color value component and
sends it to be unpacked
*/
int fileRead(){
string line;
int lineNum = 0;
ifstream myfile ("res/OnePerson4.pcd");
if (myfile.is_open())
{
while (myfile.good())
{
lineNum++;
getline (myfile,line);
// Exclude the header information in the kinect file from the unpacking process
//if(lineNum > 10 && lineNum <20){//This for loop is activated when testing
if(lineNum > 10){
//Test code to extract the x,y,z values
string xyzvalFromKinectStr = line.substr(0,line.find_last_of(' '));
//cout<<xyzvalFromKinectStr<<"\n";
//Extract the packed rgb value
string valFromKinectStr = line.substr(line.find_last_of(' '));
double kinectVal = ::atof(valFromKinectStr.c_str());
kinectToRgb(kinectVal, xyzvalFromKinectStr);
}
}
myfile.close();
}
else
{
cout << "Unable to open file";
}
return 0;
}
どちらのリンクも私のためにゼロバイトをダウンロードします。 –
@MichaelDaum、申し訳ありません。すぐに問題を解決します。問題を眺める時間を取ってくれてありがとう。 –
RGBは通常RGBAとして表されます。これはプラットフォームによって異なる場合がありますが、それぞれR GとBについて(rgbD >> 24)、>> 16、>> 8を試してください。しかしそれはおそらく問題ではないので...あなたは疎な3次元空間でR-G-Bを得ようとしています。あなたはそれが間違っている色のアンパックですが、図面コードやファイルI/Oコードではないことを完全に確信していますか? –