首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像处理

图像处理
EN

Stack Overflow用户
提问于 2011-04-11 02:10:50
回答 2查看 909关注 0票数 2

我有一组图像,如图所示,我使用下面的代码找到了每个图像的质心,现在我将新图像存储在Im01,Im02,Im03中,它们都是N*N矩阵图像。

代码语言:javascript
复制
Im1 = imread('image1.png');
[x,y] = ait_centroid(Im1);
Im01=circshift(Im1, [-1 -5]);
[x,y] = ait_centroid(Im01);
Im01=uint16(Im01);

Im2 = imread('image2.png');
[x,y] = ait_centroid(Im2);
Im02=circshift(Im2, [-2 -4]);
[x,y] = ait_centroid(Im02);
Im02=uint16(Im02);

Im3 = imread('image3.png');
[x,y] = ait_centroid(Im3);
Im03=circshift(Im3, [-3 -5]);
[x,y] = ait_centroid(Im03);
Im03=uint16(Im03);

我的挑战是如何使用迭代添加这个图像,因为我有一大组图像(而不是jst 3个图像)。我能够手动添加它们,并通过这样做来显示平均值

代码语言:javascript
复制
G=imadd(Im01,Im02,'uint16');
G=imadd(G,Im03,'uint16');
imshow(uint8(G/3),[]);

当我尝试通过执行以下操作进行迭代时,结果显示为worked.But

代码语言:javascript
复制
G=imadd(Im01,Im02,'uint16');
for i=1:1:3
G=imadd(G,Im(i),'uint16');
end

我得到了错误,我还尝试通过以下方式将图像定义为矩阵的矩阵

代码语言:javascript
复制
H = [ [Im01] [Im02] [Im03] ]
G=imadd(Im01,Im02,'uint16');
for i=1:1:3
G=imadd(G,H(i),'uint16');
end

错误指示在H(i)中。

代码是Matlab编写的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-11 09:25:33

H = [ [Im01] [Im02] [Im03] ]不会在Matlab中创建矩阵数组。相反,它将这三个图像连接到一个数组中。您要做的是创建一个cell array,也就是说,可以执行以下操作:

代码语言:javascript
复制
%# curly brackets to construct cell array
H = {Im01, Im02, Im03 }; 
G=H{1}; %# initialize G
for i=2:1:3 %# start at img#2
   G=imadd(G,H{i},'uint16');
end

或者,如果要对图像执行的操作只是添加它们,则可以执行以下操作:

代码语言:javascript
复制
%# in case you want to store the images
images = cell(numberOfImages,1);

%# loop over all images
for iImg = 1:numberOfImages
   tmp = imread(sprintf('image%i.png',iImg));
   [x,y] = ait_centroid(tmp);
   Im01=circshift(tmp, [x y]); %# I assume that's what you want?
   [x,y] = ait_centroid(Im01); %# not sure what you do this for
   if iImg ==1
      G = uint16(tmp);
   else
      G = imadd(G,uint16(tmp));
   end
   %# maybe you want to store your images
   images{iImg} = uint16(tmp);
end
票数 1
EN

Stack Overflow用户

发布于 2011-04-11 05:28:29

您可以使用sprintfeval遍历图像的名称。

代码语言:javascript
复制
G=imadd(Im01,Im02,'uint16');
for i=1:1:3
   Im_name = sprinft('Im0%i',i);    
   G=imadd(G,eval(Im_name),'uint16');
end

Im02函数将在字符串'Im0‘后面添加数字i,因此您将首先得到Im01,然后是im0,依此类推。eval函数用于将这些字符串解释为Matlab变量。

编辑:我认为避免这种问题的最好方法是从头开始将图像保存在一个单元格中。也就是说,当读取图像时,将它们读取到一个单元中

代码语言:javascript
复制
Im{1} = imread('Im01.xxx')
Im{2} = imread('Im02.xxx')
etc...

然后,您可以轻松地迭代不同的图像,而无需使用字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5613724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档