检查重复值然后找到平均值

时间:2014-12-19 02:13:42

标签: matlab image-processing

我正在处理我的项目,其中有Img1Img2两个图像。 因为Img1是二进制图像所以我已经计算了所有十进制值。 对于Img2我已经获取了像素值。

为方便起见,我从整个图像中获取了10X10矩阵值,用于以下操作。

[row,col] = size(Img1);
m = zeros(row,col);
w = [1 2 4 8; 16 32 64 128; 256 512 1024 2048; 4096 8192 16384 32768]; 
for i=2:10
    for j=2:10
        O = double(Img1(i-1:i+2,j-1:j+2));
        m(i,j) = sum(sum(O.* w));

    end;
end; 
[row,col] = size(Img2);
 count = row*col;
 outMat = zeros(4,4,count);
l=0;
%m = zeros(row,col);delete
O = zeros(1,256);
for i=2:10
    for j=2:10
         l=l+1;
       outMat(:,:,l) = Img2(i-1:i+2,j-1:j+2);
        vec = outMat(3,3,:);
        vec = vec(:);       
    end;
end;

现在,对于Img2,我已经收集了所有像素值,并且需要在下面存储2个col.as。

Col1        col2 from Img2
from Img1
44128       162
54960       150
58320       119
31200       120
48240       180
54960       160
44128       163
51109       90  
44128       56

这里,44128重复3次,现在添加col2的所有相应的映射值,即 162,163,56加上它们除以3(因为44128的出现是3次)和相同的程序 所有价值观都要遵循。

44128  (162+163+56)/3
54960  (150+160)/2
58320  (119/1)
31200  (120/1)
48240  (180/1)
51109  (90/1)

在这里,我想创建一个1D 1X(col大小)的数组N,作为Img1小数的计数器 值,重复值并将计数器值存储在N内,然后通过将N的相应计数器值除以Img2像素值来找到均值,如上所述。 请帮助:-(,我怎样才能进一步编写代码。

2 个答案:

答案 0 :(得分:0)

试试这个:

totals = sparse(1, Img1, Img2 );
denominators = sparse( 1, Img1, 1);
img1vals = find(totals);
averages = nonzeros(totals) ./ nonzeros(denominators);
[img1vals(:) averages(:)]

答案 1 :(得分:0)

以下是使用sparse进行此操作的方法。

累积金额和计数:

S = sparse(Img1, ones(size(Img1)), Img2);
N = sparse(Img1, ones(size(Img1)), ones(size(Img2)));

确定实际发生的值:

ind = find(N)

提取这些值的总和和计数:

S = full(S(ind))
N = full(N(ind))

计算相应的手段

M = S ./ N

对于您的示例数字,这会给出

ind =

       31200
       44128
       48240
       51109
       54960
       58320

S =

   120
   381
   180
    90
   310
   119


N =

     1
     3
     1
     1
     2
     1


M =

   120
   127
   180
    90
   155
   119