Pomoc w tłumaczeniu kodu Matlab

0

Witam, nigdy z Matlab nie miałem do czynienia więc proszę o pomoc z paroma liniami kodu.

G = imread(’image. tif ’ );
Bins(256)=0;
tsize =size (G);
Chis( tsize (1))=0;
P( tsize (1))=0;
for i=1: tsize (1),
%count pixel frequencies
   for j=1: tsize (2),
       Bins(G(i, j )+1)=Bins(G(i, j )+1)+1;
       end
      %calculate chi squared
      chi2=0;
      for k=1:127
      nexp=(Bins(2∗k−1)+Bins(2∗k))/2;
      if (nexp>5)
         chi2=chi2+((Bins(2∗k)−nexp)ˆ2)/nexp;
     end
end
Chis(i )=chi2;
end
%calculate P
xu=chi2;
r=127;
rOver2 = 0.5∗r ;
gammaval = gamma(rOver2);
F = @(x) x .ˆ( rOver2−1).∗exp(−0.5∗x)/gamma(rOver2)/2ˆrOver2;
if xu == inf
   prob = 1
else
   prob = quad(F,0, xu );
end
P(i )=1−prob;
end
%plot graph
plot (P );

chodzi mi dokładnie o linie :

Bins(256)=0;
tsize =size (G);
Chis( tsize (1))=0;
P( tsize (1))=0;

Bins(G(i, j )+1)=Bins(G(i, j )+1)+1;

Dowolny język c#, c, c++, java, pascal.

0

Trudno, mi chodzi tylko o 5 linii których nie rozumiem.

Ale mogę spróbować w C#

Bins(256)=0 czyli int[] Bins = new int[256];
tsize =size (G); imo niepotrzebne bo później zapiszę się w dwóch pętlach for po Image.Width i Image.Height
Chis( tsize (1))=0; int[] czyli Chis = new int[Image.Width * Image.Height] i wyzerowanie
P( tsize (1))=0; to samo.

Bins(G(i, j )+1)=Bins(G(i, j )+1)+1; czyli pobranie pixeli z obrazka o współrzędnych i + 1,j + 1 ? i dodanie podstawienie do nich wartości o 1 większej ?

0

Bins(G(i, j )+1)=Bins(G(i, j )+1)+1;
robi histogram obrazka.

W C to byłoby +/- tak:

uint8_t G[SIZE_XG][SIZE_YG];
int Bins[256] = {0,0,0,0,0,0} //.. i tak do 256 zer}

get_picture(G, x_size, y_size, filename); //funkcja wczytujaca obrazek z pliku do tablicy G
//jakas abstrakcyjna, chodzi po prostu o ideę
//i teraz zakladamy, ze w G mamy obrazek o wartosciach pixeli od o do 255

for(.... //cośtam cośtam i j ;) 
Bins_index = G[i][j]  ;// //strzelam ze obrazek w 256 kolorach bo inaczej wyskoczysz poza index
//w matlabie +1  jest bo obrazek idzie od 0 a Matlab indeksuje tablice od 1
Bins[bins_index]  += 1; //histogram obrazka...

Chis( tsize (1))=0; int[] czyli Chis = new int[Image.Width * Image.Height] i wyzerowanie
P( tsize (1))=0; to samo.

Źle. Jednen wymiar.
chis = new int[Image.Width]
albo
chis = new int[Image.Height]
(nie pamiętam który size to x a który y)

żeby było po Twojemu musiałbyś zrobić tak:
P( tsize (1) .* tsize(2) )=0;

0
Bins(256)=0; % 256 indeks tablicy Bins jest zerowany, jeżeli wcześniej nie było tablicy Bins to tworzy tablice 0 o rozmiarze 256 (uwaga, w Matlabie indeksujemy od 1)
tsize =size (G); % tzise jest równy wielkosci tablicy G, jeżeli G jest wielowymiarowe to zwracana jest tablica n-elementowa 
Chis( tsize (1))=0; %tablica Chis jest zerowana na ideksie równym tsize(1), jeżeli jej nie ma to tak samo jak w przypadku Bins
P( tsize (1))=0; %tjw tyle że zmienna P

Bins(G(i, j )+1)=Bins(G(i, j )+1)+1; % tablica Bins na indeksie równym G(i,j)+1 jest zwiększana o 1

Chyba dasz teraz radę se to przełożyć na inny kod

pzdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1