2017-01-24 11 views
0

これは私の512 * 512イメージを64 * 64 * 64次元の立方体にスライスするコードです。しかし、私は再び2次元配列にそれを形作るとき私は元のimage.am私は何かを間違ってやって助けてください与えていないです。イメージのシャッフルとスライス

clc; 
Image=imread('C:\Users\Farhan\Documents\lena_gray.gif'); 
[y,ymap]=imread('C:\Users\Farhan\Documents\lena_gray.gif'); 
im=ind2gray(y,ymap); 
% im=imresize(im,0.125); 
[rows ,columns, colbands] = size(im) 

blockSize = 64; 


image3d = zeros(64, 64, 64); 

sliceNumber = 1; 


for row = 1 : 64 : 512 

for col = 1 : 64 : 512 

    row1 = row; 
    row2 = row1 + blockSize - 1; 
    col1 = col; 
    col2 = col1 + blockSize - 1; 

    oneBlock=im(row1:row2,col1:col2); 


    subplot(64, 64, sliceNumber); 
    imshow(oneBlock); 
    image3d(:, :, sliceNumber) = oneBlock; 
    sliceNumber = sliceNumber + 1; 

    end 

    end 
    image3d=reshape(image3d,512,512); 
    figure,imshow(uint8(image3d)); 
+0

スライスを注文することが重要です。行と列のループを変更してみてください。まず、colとrowよりも。 –

+0

単純に行と列を切り替えてもコードは修正されません。 – julian59189

+0

MATLAB関数の再構成では、coloumn wiseを通過すると予想されますが、coloumnwiseの半分と行の賢明な操作の半分を使用して立方体を作成しているため、スライス用の行列の書式設定は後で変更する予定ではありません。だから最終的にあなたがそれを形作っているときにそれは間違って形作っています – Zeeshan

答えて

0

ちょっとしたヒント。

P(:,:,1) = [0,0;0,0] 
P(:,:,2) = [1,1;1,1] 
P(:,:,3) = [2,2;2,2] 
P(:,:,4) = [3,3;3,3] 

B = reshape(P,4,4) 

B = 

    0  1  2  3 
    0  1  2  3 
    0  1  2  3 
    0  1  2  3 

だから、スライスを変更したり、自分で再形成することができます。

0

あなたの質問が正しいと分かっている場合は、以下のコードを調べて同じ操作を行うことができます。

% Random image of the provided size 512X512 
imageX = rand(512,512) 
imagesc(imageX) 

% Converting the image "imageX" into the cube of 64X64X64 dimension 
sliceColWise = reshape(imageX,64,64,64) 
size(sliceColWise) 

% Reshaping the cube to obtain the image original that was "imageX", 
% in order to observe that they are identical the difference is plotted 
imageY = reshape(sliceColWise,512,512); 
imagesc(imageX-imageY) 

NB:MATLABからは、リシェイプが列方向

リシェイプ(X、M、N)または再構築(X、[M、N])はM-を返す動作することを確認することができ助けますNからN個の行列 がXから列方向に取り出されます.XにM * N要素​​がない場合、エラーは になります。

関連する問題