无意识的无限循环与'imshow`

时间:2017-04-26 01:29:09

标签: matlab for-loop image-processing infinite-loop

for i = [I, J, K];
   imshow(i);
end

IJK是16位图片。

脚本不断尝试抽出图像(但不会)并进入无限循环。

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:1)

如果尺寸相同,您可以将多个图像存储在矩阵中。 但是,如果图像尺寸不同,则应将图像存储在cell中。这种方法不那么麻烦,因为您不必担心以后如何提取它们。

定义一个大小等于图像数量的单元格。

numImages = 3;
Images = cell(1,numImage);

将图像I存储到单元格中:

Images{1,1} = I;

现在查看图片并显示它们

for ii = 1:3
    imshow(Images{1,ii});
end

示例:

I = imread('cameraman.tif');
J = imread('peppers.png');
K = imread('snowflakes.png');
Images = cell(1,3);
Images{1,1} = I;
Images{1,2} = J;
Images{1,3} = K;
for ii=1:numel(Images)
    figure;imshow(Images{1,ii});
end

答案 1 :(得分:0)

为了更好地理解你究竟缺少哪一点/这里发生了什么:使用方括号在这里就像连接一样。这一行

i = [I, J, K]    % separated with commas or spaces for horzcat
i = [I; J; K]    % separated with semi-colons for vertcat

horzcatvertcat相同:

i = horzcat(I, J, K);
i = vertcat(I, J, K);

假设I, J, K是64x64灰度值图像。 (水平)连接将创建64x192矩阵。 for循环将以列为单位通过矩阵,这意味着它将提取192次的64x1向量(或更常用于较大的图像,这可能感觉像“无限”)。仅显示带有imshow()的矢量将不会显示任何内容。

正如已经指出的,使用单元格是一种更灵活的图像存储方式。使用数组时,您必须处理每个维度(这仅在图像大小相同时才有效):

sizeImage = size(I);    % assume all img are same size (as I)
numImages = 3;          % needed for allocating array

% init array for imgs and fill images into array: e.g. 64x64x3
imageArray = zeros([sizeImage numImages]);

imageArray(:,:,1) = I;  % :,: selects all elements of a dimension
imageArray(:,:,2) = J;   
imageArray(:,:,3) = K;

for n = 1:numImages                         % iterate over image index
    figure; imshow(imageArray(:,:,n));      % n = 1, 2 ... , numImages 
end                                         % is used for position in imageArray

访问数组/单元格时使用冒号:选择维度的所有元素。例如。 imageArray(:,:,n)将选择第一维和第二维的所有元素,对应于64x64图像。对于RGB图像,具有3个图像的阵列将是64x64x3x3,您必须使用imageArray(:,:,:,n)来选择所有三个颜色通道。

请注意,使用for i = img_array将不起作用,因为这将再次提供向量。

E.g。对于img_array:64x64x5(五个64x64灰度值图像),这将迭代除一个维度之外的所有维度(并将剩余的目标分配给i):img_array(:,1,1)img_array(:,2,1)img_array(:,3,1),...,img_array(:,1,2)img_array(:,2,2) ...,img_array(:,64,5)并将再次为i生成64 * 3 = 192个向量。

正如已经指出的那样,如果你有可变的图像大小,那么使用单元格数组就是这样。您可以咨询:Difference between cell and matrix in matlab?