2014-12-19 2 views
2

Я работаю над своим проектом, где у меня есть 2 изображения: 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 раза, теперь добавляют все значения correspong отображение из col2 т.е. 162,163,56 добавить их все разделить на 3 (Becos вхождение в 44128 составляет 3 раза) и та же процедура необходимо следовать для всех значений.

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

Здесь я хочу создать массив N из 1D 1X (размер COL), который действует как счетчик Img1 десятичных значений, повторяющихся значений и сохранять значения счетчика внутри N, а затем найти среднее по деление соответствующих значений счетчика N на значения пикселей Img2, как указано выше. . Пожалуйста, помогите :-(, как я могу писать код дальше

ответ

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)) 

Compute соответствующие средства

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 
+0

Как можно записать это внутри приведенного выше цикла для определения этих средних значений? !! – STripathy

+0

@STripathy, боюсь, я не понимаю, что делает ваш код. Насколько я могу судить, в какой-то момент вашего кода у вас есть данные, которые вы назвали «Col1 от Img1» и «Col2 от Img2», и на этом этапе вам нужно вставить код, который я вам дал. Это 'm' и' vec', или что это? -Я не могу сказать. –

+0

@ ADonda. Если вы просто примените приведенный выше код 'Img1' (двоичное изображение) и' Img2' (для серого изображения), вы можете получить результат. Здесь 'm', где хранятся десятичные значения, такие как (44128 54960 ...) и' vec', где хранятся значения серого. – STripathy

0

Попробуйте это:

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

Спасибо ... Он работает: -) – STripathy

Смежные вопросы