我正在处理我的项目,其中有Img1
和Img2
两个图像。
因为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
像素值来找到均值,如上所述。
请帮助:-(,我怎样才能进一步编写代码。
答案 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