2017-07-03 97 views
1

我有剧情图像:MATLAB

  1. 的图像,保存为像素的阵列。
  2. 单元格数组的单元格数与图像中的像素数相同。

基本上,单元阵列的每个单元对应于图像中的像素的位置。

我想在三维图的xy平面上绘制图像,然后将这些值绘制在z平面的单元阵列中。每个单元格中的值对应于图像的像素位置和相应的z值。

例如,

cellarray{1} = [10 2056] 
cellarray{2} = [18 1928] 

在XY平面内显示的图像,那么我想

  • 甲点上方的图像的像素1作图,与z值的2056
  • 的点绘制上述图像的像素18,与1928年

一个z值我也行使用imagesc(image)来绘制图像,但我不知道如何转换单元格数组中的日期以创建3D图,其中z值高于图像的相应像素。

+0

是在cellarray {N}唯一的第一要素? – Wolfie

+0

是的,它们是独一无二的。 cellarray {1}的所有第一个元素都是1,cellarray {2}的所有第一个元素都是2,等等。感谢您的帮助! – Anonymous

+0

但是你在上面说过,例如'cellarray {2} = [18 1928]'所以第一个元素是18,而不是2? – Wolfie

回答

0

假设您有一些单元阵列cellarray,其中包含16个[pixel number, z value]对。这两行成立了一个随机演示...

% Set up random cell array, with 1x2 arrays in each cell 
% First number in each array is unique pixel number, second is z value 
z = num2cell(randi(64,4,4)); 
cellarray = cell(4,4); for ii = 1:16; cellarray{ii} = [ii z{ii}]; end; 

现在,我们想绘制这一点,所以它转换成16×2矩阵,其中每行是1x2的细胞之一:

% Use the colon (:) to make cell array one column, use cell2mat to convert to matrix 
g = cell2mat(cellarray(:)); 

要从索引获取2D x和y坐标,可以使用ind2sub

[x, y] = ind2sub([4, 4], g(:,1)); % Change [4, 4] to the size of your image 

现在你可以使用plot3绘制这些,持有,如果要保留以前的情节(如图像):

hold on % to retain previous plot, like from imagesc 
plot3(x, y, g(:,2), '.'); % Using the dot to specify points not a line 
+0

非常感谢!这真的很有帮助和真棒。我想知道你认为哪个函数最适合在3d图的xy平面中绘制图像本身。 imagesc()返回一个二维图,所以我一直在使用这一点的代码: – Anonymous

+0

没问题,很高兴我可以帮助 – Wolfie