二次元画像のスタック​の方法を教えていただ​きたいです。

大量の二次元画像を積み重ね、(stack)して3Dモデルとして表示したいと考えています。
イメージとしては、三次元のz軸方向をずらしながら画像を積み重ねるイメージです
画像の種類はJPEGです。
よろしくお願いします。

2 comentarios

Kenta
Kenta el 25 de Jul. de 2019
ちなみにですが、例となるようなデータなどはございますか。
イメージ的には、関数catなどで、4次元方向に積み重ねながら、下の例のようなデータを作って可視化すればよいのではないかと考えています。
I=imread('n-th_img.jpg');
s= cat(4,s,I);
virgo kk
virgo kk el 26 de Jul. de 2019
Editada: virgo kk el 26 de Jul. de 2019
返信有難うございます。データは、持ち出し不可なので詳細だけお伝えさせていただきます。データは元々拡張子dicomです。CTのスライス画像であったものをトリミング処理するために一度jpegに変換してからトリミングを行っています。画像サイズは136*190です。
以下現在までに作成しているコードです。
よろしくお願い致します。
clear;
for i=1:5
% {} = cell array
images{i} = imread(sprintf('%d.jpg',i));
I{i} = (images{i});
end
%画像の番号順読み込みループ
td = zeros(136,190,5);   % 空の三次元配列データを追加
for i = 1:5
td(136,190,i) = I(i) %空の三次元配列にz軸をずらしながら代入していく
end
%エラーメッセージ
>> no1
cell から double に変換できません。
エラー: no1 (line 11)
td(136,190,i) = I(i)

Iniciar sesión para comentar.

 Respuesta aceptada

Kenta
Kenta el 26 de Jul. de 2019

0 votos

clear;clc
td = zeros(136,190,5);  
for i = 1:5
td(:,:,i)=imread(sprintf('%d.jpg',i))
end
対象画像は5枚で、グレースケールということで正しいですか。それならばこのようにすれば読み取れると思うのですがいかがでしょうか

2 comentarios

virgo kk
virgo kk el 26 de Jul. de 2019
返信有難うございます。
ご指摘通り、対象画像5枚グレースケール画像です。
上のコードで読み取りをすることができました。有難うございます。
問題はここからで、この読み取った画像を重ねて、三次元表示で表したいというのが本題です。
イメージをお伝えすると、四角形の二次元画像をz軸にずらしながら積み重ねていくと、角柱のような図形で表せると思います。この図形を表示したいということです。
Kenta
Kenta el 26 de Jul. de 2019
ちょうど上のようなイメージでしょうか?ここのコードに習って試せば、似たようなものは見れると思うのですが、いかがでしょうか。

Iniciar sesión para comentar.

Más respuestas (1)

virgo kk
virgo kk el 26 de Jul. de 2019

0 votos

ct_img_02.jpg
返信有難うございます。
少しイメージと離れていて、
上のようなCTの画像を積み重ねていくと下のような不完全ではあると思いますが、円柱になると思います。
この円柱の体積を求めるために、画像をスタックしてモデルとして表示したいです。
thumbnail.png

13 comentarios

Kenta
Kenta el 26 de Jul. de 2019
[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などで、もう少し効率よく書くかと思いますが、見やすくするためにうえのように書いています。
virgo kk
virgo kk el 26 de Jul. de 2019
Editada: virgo kk el 30 de Jul. de 2019
返信有難うございます。
イメージが伝わりづらく、申し訳ありません。現在は、5枚ほどの画像でやっていますが
本来は1000枚ほどで実行するので、上のモデルになると考えています。
コードの方は、list関係のTool box がPCの都合上導入できていないため、導入後実行してみます。
お世話になります。現在研修室で使用しているMatlabのバージョンが2017bで、
Kentaさんが使われているToolboxを導入することが難しいようです。
代替となる関数を利用してモデルを組み立てることは可能でしょうか??
よろしくお願いします。
Kenta
Kenta el 1 de Ag. de 2019
どの行が実行できませんか?listは変数名で、関数ではありません。
pcshowが実行できないのでしょうか。もしかしたらこちらのコードが間違っている可能性もあります。詳しく状況をおしえてください
virgo kk
virgo kk el 1 de Ag. de 2019
Editada: virgo kk el 1 de Ag. de 2019
返信有難うございます。
エラー箇所は21行目のpcshowです。当方のMatlabのバージョンは2017bです。
プログラムとスクリーンショットを添付します。
宜しくお願いします。
エラー文が途切れているので再度貼り付けます。
'list' を使用するには、次の製品のライセンスを取得し、インストールして有効化していなければなりません:
Global Optimization Toolbox
エラー: no1 (line 21)
figure;pcshow(pointCloud(list))
えら
Kenta
Kenta el 1 de Ag. de 2019
listを全てLにして、再度実行していただけますか?
virgo kk
virgo kk el 1 de Ag. de 2019
実行しました。
エラーが出ています。
宜しくお願いします。
cap2.PNG
Kenta
Kenta el 1 de Ag. de 2019
Editada: Kenta el 1 de Ag. de 2019
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))
virgo kk
virgo kk el 2 de Ag. de 2019
Editada: virgo kk el 2 de Ag. de 2019
お世話になります。ピクセル値は0より大きくて大丈夫だと思います。
変更しました。
エラー文が変わりました。
宜しくお願いします。
キャプチャ.PNG
Kenta
Kenta el 2 de Ag. de 2019
Editada: Kenta el 2 de Ag. de 2019
[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'で輝度値のベクトルを指定したら輝度も表示できますので
やってみてください
このリンクを見れば、輝度の表示もできます。
virgo kk
virgo kk el 2 de Ag. de 2019
Editada: virgo kk el 2 de Ag. de 2019
有難うございます。エラーはなくなりました。
結果の表示なんですが、点ではなく恐らくすべての点が表示されて結果面が丸ごと写っている状態だと思います。私が何かコードを勘違いしているのでしょうか?
お伝えするのが遅れてしまってんですが、理想の3Dスタックを示しておきます。Image J使用
このようなスタックモデルを作ることができますか??
斜めからみたモデル
上から
Kenta
Kenta el 2 de Ag. de 2019
td(x,y,z)>=0の0という閾値を変えればよいです。今回は0以上なので全てが表示されます。実際は特定の輝度値以上のみを表示されるのですが、100くらいですかね?
virgo kk
virgo kk el 2 de Ag. de 2019
有難うございます。
100以上にしても上と同様の3dイメージが表示されます。
144以上などコマンドプロンプトで表示されていた配列の中身の中央値も入れてみましたが、
同様のイメージでした。
Kenta
Kenta el 2 de Ag. de 2019
そうですね、例えば180・200・220などでもダメですか?
そのデータを扱ったことがないので、現状の情報だけではよくわかりません...
その値を変える・輝度もいれて見やすくするなど、いろいろと検討して教えてください!

Iniciar sesión para comentar.

Categorías

Más información sobre Image Processing Toolbox en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 25 de Jul. de 2019

Comentada:

el 2 de Ag. de 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!