[已答复] sum求和题

[复制链接]
gll_89 发表于 2013-2-28 15:05:49
读取一图片,得到其对应的数字矩阵imdata,算出矩阵imdata前m(1)行m(2)列所有数字之和sum,但是sum输出值感觉不对,总是255,换张图片sum值还是255.程序代码如下:

%读取指定位置的图像,并得到相应的数字矩阵;
imdata=imread('D:\gll\gll\image\1.bmp');
imshow(imdata);
%计算数字矩阵前m行n列的所有数字之和
sum=0;
s=size(imdata);
m=ceil(s/2);
for k=1:m(1)
    for l=1:m(2)
       sum=sum+imdata(k,l);
    end
end
sum

请问大侠这是怎么回事?

5 条回复


stellari 发表于 2013-2-28 15:45:40
你读出来的数据是uint8型的,最大只能到255,所以当然再怎么加都不会超过255.
一般图像处理前要先将其转换为double型(用im2double函数)。

gll_89 发表于 2013-3-1 09:57:21
stellari 发表于 2013-2-28 15:45
你读出来的数据是uint8型的,最大只能到255,所以当然再怎么加都不会超过255.
一般图像处理前要先将其转换 ...

o了!谢谢stellari!又长了一个经验

gll_89 发表于 2013-3-1 10:09:10
stellari 发表于 2013-2-28 15:45
你读出来的数据是uint8型的,最大只能到255,所以当然再怎么加都不会超过255.
一般图像处理前要先将其转换 ...

stellari,谢谢你的解答!不过还有一个问题没有解决,如果连续读入多张图片,得到矩阵经过im2double处理后,每张图片的求和值是一样的:
%读取指定位置的图像,并得到相应的数字矩阵;
files=dir('D:\gll\gll\image\*.bmp');  
for i=1:size(files,1)  
filename=files(i,1).name;
imfile=strcat('D:\gll\gll\image','\',filename);
imdata1(:,:,i)=imread(imfile);
figure;
imshow(imdata(:,:,i));
end

%将得到的数字矩阵进行分块
%此处分为4块,并计算各个块每个位置上的元素之和
%和sum(i,j)为第i张图片第j区的灰度值之和
sum=zeros(5,4);
for j = 1:5
     I1 = imdata(:,:,j);
     I2=imadjust(I1,[0,1],[0,0.5]);
     imshow(I1)
     I = im2double(I2);
     s=size(I);
     m=ceil(s/2);
     for k=1:m(1)
         for l=1:m(2)
             sum(j,1)=sum(j,1)+data(k,l);
         end
     end
    for k=1:m(1)
        for l=m(2)+1:s(2)
            sum(j,2)=sum(j,2)+data(k,l);
        end
    end
    for k=m(1)+1:s(1)
        for l=1:m(2)
            sum(j,3)=sum(j,3)+data(k,l);
        end
    end
    for k=m(1)+1:s(1)
        for l=m(2)+1:s(2)
            sum(j,4)=sum(j,4)+data(k,l);
        end
    end
end
sum
  
输出的sum为
sum =

  1.0e+003 *

    5.3398    5.3937    5.0140    5.3282
    5.3398    5.3937    5.0140    5.3282
    5.3398    5.3937    5.0140    5.3282
    5.3398    5.3937    5.0140    5.3282
    5.3398    5.3937    5.0140    5.3282

请问这是怎么回事?

stellari 发表于 2013-3-1 12:02:19
gll_89 发表于 2013-3-1 10:09
stellari,谢谢你的解答!不过还有一个问题没有解决,如果连续读入多张图片,得到矩阵经过im2double处理 ...

一眼看过去并没有看到你在循环内的哪里给data赋了值。所以每次j循环时,data(k,l)的值都是相同的,当然最后得到的每行内容都一样。这里你可能本意是要使用I,而不是data。但是我并不清楚你实际要实现的东西,所以不好妄加猜测。

gll_89 发表于 2013-3-1 16:09:30
stellari 发表于 2013-3-1 12:02
一眼看过去并没有看到你在循环内的哪里给data赋了值。所以每次j循环时,data(k,l)的值都是相同的,当然最 ...

stellari,首先感谢你的答复!在调试程序过程中变量改来改去结果就乱了,思维严谨是编程者应该具备的,从你身上我学到了这点,谢谢你!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表