1

SLAM を使用して環境を構築しています。私はこれを Lidar センサーで行っていますが、非常にうまく機能しています。これで、環境のマップが .tiff 形式になりました。ポイントAからBへの最短パス(ダイクストラ)を見つけたいのですが、私の問題は、この.tiffマップを使用できる形式に変換する方法がわからないことです。C++でコーディングしています。

どうすればこれを行うことができるか考えている人はいますか?

ありがとう :)

編集:

マップはこんな感じ。黒いピクセルは障害物で、灰色のピクセルは動くスペースです。

4

2 に答える 2

1

CImg-link hereを使用することをお勧めします。これは C++ であり、 「ヘッダーのみ」として実装されているため、非常に軽量で使いやすいため、単一のファイルCImg.hをダウンロードしてインクルードするだけで、すぐに使用できます。

このコードは TIF マップを読み取り、ピクセルにアクセスできるようにします。

#include <iostream>
#include "CImg.h"
using namespace std;
using namespace cimg_library;

int main(int argc, char** const argv)
{
   // Load the map
   CImg<unsigned char> map("map.tif");

   // Get and print its dimensions
   int w = map.width();
   int h = map.height();
   cout << "Dimensions: " << w << "x" << h << endl;

   // Iterate over all pixels displaying their RGB values
   for (int r = 0; r < h; r++){
      for (int c = 0; c < w; c++){
         cout << r << "," << c << "=" << (int)map(c,r,0,0) << "/" << (int)map(c,r,0,1) << "/" << (int)map(c,r,0,2) << endl;
      }
    }
    return 0;
}

サンプル出力

Dimensions: 400x300
0,0=94/94/94
0,1=100/100/100
0,2=88/88/88
0,3=89/89/89
0,4=89/89/89
0,5=89/89/89
0,6=89/89/89
0,7=89/89/89
0,8=89/89/89
0,9=89/89/89
0,10=89/89/89
0,11=89/89/89
0,12=89/89/89
0,13=89/89/89
0,14=89/89/89
0,15=93/93/93
0,16=101/101/101
....
....

TIFF の組み込みサポート (ImageMagick なし) を含めるには、次のようにコンパイル フラグを設定します。

g++ -Dcimg_use_tiff ... -ltiff

をインストールしておく必要がありますlib tiff

色に興味がない場合は、画像を白黒に変換して、3 つではなく 1 つのチャネルにし、しきい値を設定して、処理しやすい純粋な黒と純粋な白にすることができます。上記のコードの最後に次のコードを追加するだけです。

// Convert to single channel black and white
CImg<unsigned char> bw = map.get_RGBtoYCbCr().channel(0);
bw.normalize(0,255).threshold(1).normalize(0,255);

// Now get pointer to black and white pixels, or use bw(x,y,0)
unsigned char* data=bw.data();

bw.save_png("result.png");

ここに画像の説明を入力

実際にはdijkstra方法がありCImgますが、現時点ではその使用方法を理解できません。誰かが知っている場合は、コメントでタグ付けしてください! ありがとう。

于 2016-10-10T10:47:23.737 に答える
0

別の方法として、 「飛行前」にデータをいじることが許可されている場合は、ImageMagickを使用して TIFF ファイルを非常に単純な PGM ファイルに変換できます。ImageMagickはほとんどの Linux ディストリビューションにインストールされており、OSX と Windows で利用できます。

PGM 形式は非常に単純で、ここで説明されています。画像が 400x300 であるため、次のようになります。

P5
400 300
255
120,000 unsigned char bytes of image data - uncompressed, unpadded

次のように TIFF ファイルを変換します。

convert map.tif -normalize -threshold 1 map.pgm

次に、ヘッダーの 3 行を読み取ってから、120,000 バイトを配列に直接読み取ることができます。このように、プラットフォームに追加のライブラリやソフトウェアは必要ありません。

ここに画像の説明を入力

于 2016-10-10T13:55:23.163 に答える