【发布时间】:2016-04-12 08:57:33
【问题描述】:
我有 3 480 行 x 640 列的图像。每个像素都有一个强度值。
我在 matlab 中阅读它们:
object_intensities = cell(1,6);
for pat=1:3
file1 = sprintf('image%d.pgm',pat-1);
dummy = double(imread(file1));
object_intensities{pat} = dummy;
end
现在对于 pat = 1 到 3,object_intensities 是一个元胞数组,这样 object_intensities{pat} 的每个元胞元素都将每个图像保存在一个 480x640 矩阵数组中。
现在我需要的是一个 480 行 x 640 列的单一结构,这样每个单元格元素在一个向量中包含每个图像像素的 3 个强度,如下所示:
structure{row 1, column 1} = [image1_intensity @ row1 column1 image2_intensity @ row1 column1 image3_intensity @ row1 column1]
structure{row 1, column2} = [image1_intensity @ row1 column2 image2_intensity @ row1 column2 image3_intensity @ row1 column2]
.
.
structure{row 480, column 640} = [image1_intensity @ row480 column640 image2_intensity @ row480 column640 image3_intensity @ row480 column640]
有什么方法可以不使用循环而是通过矢量化来做到这一点?
【问题讨论】:
-
三个图像的强度是RGB通道的吗?还是
object_intensities的每个单元格实际上都包含一个 480-by-640-by-3 矩阵?如果它确实包含一个单通道图像(我怀疑你使用imread,你可能需要先将其转换为灰度)然后尝试cat(3,object_intensities{:}),你会得到一个不错的480 i>-by-640-by-3 矩阵。但是我想你可以在阅读图像时这样做,基本上,你为什么想要你说你想要的数据结构?与常规矩阵相比,它真的很难处理。 -
图像已经是灰度的。我希望在我描述的这个数据结构中使用它,因为我需要每个图像像素的强度序列。
-
3D 矩阵会更好,单元阵列更难处理。此外,我很确定
imread默认情况下会使您的图像变为 RGB,无论它是否为灰度。您仍然需要进行转换。
标签: matlab image-processing cell-array