【问题标题】:Checking the repeated values and then finding mean检查重复值,然后找到平均值
【发布时间】:2023-03-06 03:23:01
【问题描述】:

我正在处理我的项目,其中有 2 张图片分别为 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.如下。

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 像素值来求平均值。 请帮助:-(,我该如何进一步编写代码。

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    这是一种使用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
    

    【讨论】:

    • 如何在上面的 for 循环中写一个 this 来确定这些平均值?!!
    • @STripathy,恐怕我不明白你的代码是做什么的。据我所见,在您的代码中,您有一个称为“来自 Img1 的 Col1”和“来自 Img2 的 Col2”的数据,此时您必须插入我给您的代码。是mvec,还是什么? ——我不知道。
    • @ADonda,如果你只是应用上面的代码Img1(二进制图像)和Img2(灰度图像)你可以得到输出。这里 m 存储十进制值,例如 (44128 54960...) 和 vec 存储灰度值。
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2020-06-04
      • 2021-12-22
      • 1970-01-01
      • 2018-07-12
      相关资源
      最近更新 更多