blobDetection libraryを使用して高さマップから等高線マップを作成しています。私の最終的な目標は、ブロブをレーザーカットして、建築景観の模造品を作ることです。処理中の特定のブロブを特定する
現在、私は輪郭を取得し、素晴らしいですSVGとして等高線マップをエクスポートするが、私は、各ブロブ(または輪郭、またはリング)を識別することができるようにしたいし、次に操作できるようにすることができます各輪郭は別々につまり、ウィンドウの上に配置し直し、重なり合わないようにしたいのです。私はまた、個々のブロブに座標を割り当てたいので、一旦それがレーザーカットされると、それぞれのブロブがどこに行くのかを簡単に知ることができます。ここで
は(著者v3gaによって提供された例から)コードです:
import processing.svg.*;
import blobDetection.*;
import peasy.*;
import processing.pdf.*;
PeasyCam cam;
PImage img;
float levels = 10;
float factor = 10;
float elevation = 125;
float colorStart = 0;
float colorRange = 160;
BlobDetection[] contours = new BlobDetection[int(levels)];
boolean recording = false;
void keyPressed(){
if (key == 'r' || key == 'R'){
recording = !recording;
}
}
void setup() {
size(1000,800,P3D);
surface.setResizable(true);
img = loadImage("map1.gif");
surface.setSize(img.width, img.height);
cam = new PeasyCam(this, img.width, img.height, 0, 500);
colorMode(HSB, 360, 100, 100);
for (int i=0; i<levels; i++){
contours[i] = new BlobDetection(img.width, img.height);
contours[i].setThreshold(i/levels);
contours[i].computeBlobs(img.pixels);
}
}
void draw(){
if (recording){
beginRecord(SVG, "frame_####.svg");
}
for (int i=0; i<levels; i++){
drawContours(i);
}
if (recording) {
endRecord();
recording = false;
}
}
void drawContours(int i) {
Blob b;
EdgeVertex eA,eB;
for (int n=0 ; n<contours[i].getBlobNb() ; n++) {
b=contours[i].getBlob(n);
if (b!=null) {
stroke(250,75,90);
for (int m=0;m<b.getEdgeNb();m++) {
eA = b.getEdgeVertexA(m);
eB = b.getEdgeVertexB(m);
if (eA !=null && eB !=null)
line(
eA.x*img.width, eA.y*img.height,
eB.x*img.width, eB.y*img.height
);
}
}
}
}
いくつかのことをテストした後、私は最高のは、xを作成し、各ブロブのための情報を含むオブジェクトの配列(することだと思うし、 y座標、レベル)を取得し、この配列をdrawContoursメソッドで指定します。しかし、私はこの配列に格納するための適切な情報を得ることが非常に困難です。
だから私の質問は以下のとおりです。
- Xを特定する方法、などこれらの塊のような複雑な形状
- のy座標Iは、配列
他のテクニック(たとえProcessingではない)を使用していても、どんな提案でも大歓迎です。 3Dでブロブを表示するには
あなたにそれらを3Dで積み上げて見たいですか? blobオブジェクトにはアクセスできるxプロパティとyプロパティがあり、レベルはBLOBのインデックスと同じになると思います。 –