二次元画像のスタックの方法を教えていただきたいです。
显示 更早的评论
大量の二次元画像を積み重ね、(stack)して3Dモデルとして表示したいと考えています。
イメージとしては、三次元のz軸方向をずらしながら画像を積み重ねるイメージです
画像の種類はJPEGです。
よろしくお願いします。
2 个评论
Kenta
2019-7-25
ちなみにですが、例となるようなデータなどはございますか。
イメージ的には、関数catなどで、4次元方向に積み重ねながら、下の例のようなデータを作って可視化すればよいのではないかと考えています。
I=imread('n-th_img.jpg');
s= cat(4,s,I);
采纳的回答
更多回答(1 个)
virgo kk
2019-7-26
0 个投票
13 个评论
Kenta
2019-7-26
[x y z]=size(td);
a=1;
for i=1:x
for j=1:y
for k=1:z
if td(x,y,z)>200
list(a,1)=x;
list(a,2)=y;
list(a,3)=z;
a=a+1;
end
end
end
end
figure;pcshow(pointCloud(list))
ありがとうございます。そのようなイメージなのですね、かなり平べったいようになると思いますが、3D点群のように見るのではどうでしょうか。はじめのコードでtdを作成したあとに、このコードを実行したら、3D表示がされませんでしょうか。対象は白く表示されるのでしょうか。ここでは輝度が200以上のボクセルのみを対象として拾っています。対象にあわせて閾値設定をしてください。
普通は、sub2indなどで、もう少し効率よく書くかと思いますが、見やすくするためにうえのように書いています。
Kenta
2019-8-1
どの行が実行できませんか?listは変数名で、関数ではありません。
pcshowが実行できないのでしょうか。もしかしたらこちらのコードが間違っている可能性もあります。詳しく状況をおしえてください
Kenta
2019-8-1
listを全てLにして、再度実行していただけますか?
virgo kk
2019-8-1
td(x,y,z)>0にしてみてはどうですか、ピクセル値は基本的に0以上ですよね?
Lが未定義です、というのは、多分ピクセル値が200以上のものはなくて、変数が作られなかったのだと思います。さきほどとはエラーの文が変わっていることから推測されます。
[x y z]=size(td);
a=1;
for i=1:x
for j=1:y
for k=1:z
if td(x,y,z)>=0
list(a,1)=x;
list(a,2)=y;
list(a,3)=z;
list(a,4)=td(x,y,z);
a=a+1;
end
end
end
end
figure;pcshow(pointCloud(list))
[x y z]=size(td);
a=1;
for i=1:x
for j=1:y
for k=1:z
if td(x,y,z)>=0
list(a,1)=i;
list(a,2)=j;
list(a,3)=k;
a=a+1;
end
end
end
end
figure;pcshow(pointCloud(list))
エラーに従い、M×3でやってみましたか?
ptCloudの変数を作って'color'で輝度値のベクトルを指定したら輝度も表示できますので
やってみてください
このリンクを見れば、輝度の表示もできます。
Kenta
2019-8-2
td(x,y,z)>=0の0という閾値を変えればよいです。今回は0以上なので全てが表示されます。実際は特定の輝度値以上のみを表示されるのですが、100くらいですかね?
virgo kk
2019-8-2
Kenta
2019-8-2
そうですね、例えば180・200・220などでもダメですか?
そのデータを扱ったことがないので、現状の情報だけではよくわかりません...
その値を変える・輝度もいれて見やすくするなど、いろいろと検討して教えてください!
类别
在 帮助中心 和 File Exchange 中查找有关 Image Processing Toolbox 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





