2011-04-13 7 views
2

Я пытаюсь преобразовать некоторый код C++ в MATLAB и иметь проблему. Кто-нибудь, пожалуйста, объясните одну строчку кода снизу.Преобразование C++ в MATLAB

int *image  = (int *) malloc(size*sizeof(int)) ; 

    bool diff = true; 
    while (diff) 
    { 
    diff = false; 
    for (unsigned int itt = 0; itt < size; itt++) 
    { 
     diff = diff || (image[itt] != image[image[itt]]); 
     image[itt] = image[image[itt]]; 
    } 
    } 

Может кто-нибудь объяснить с

diff = diff || (image[itt] != image[image[itt]]); 
    image[itt] = image[image[itt]]; 

Эта часть

image[image[itt]] 

Я не понимаю, как это работает в терминах MATLAB

Image = zeros(100,100); 

ImageSize = (Image); 
diff = true; 

while(diff) 
    diff = false; 
    for x=1:ImageSize(1) % Height 
     for y=1:ImageSize(2) % Width 
     diff = diff || (image(x,y) ~= ????); 
     image(x,y) = ????; 
     end 
    end 
end 

Благодаря тому, кто может помочь мне d это.

+1

Значит, вы не понимаете, что делает C++-код? Или вы не понимаете, как это сделать в Matlab? – Phonon

ответ

4

Прежде всего, ImageSize = (Image); не подходит. Это просто назначит ImageImageSize. Вместо этого используйте ImageSize = size(Image);.

Во-вторых, вы используете двойное индексирование в коде Matlab, в то время как код C++ использует единую индексацию.

while(diff) 
    diff = false; 
    for n=1:numel(Image) %# Total pixels in the image 
     diff = diff || (Image(n) ~= Image(Image(n))); 
     Image(n) = Image(Image(n)); 
    end 
end 

Вы, возможно, придется перенести вашу матрицу, потому что я не уверен, работает ли код C++ столбцам или по строкам. Кроме того, поскольку вы инициализируете матрицу ко всем нулям (zeros(100,100);), вы получите все нули в качестве результата. Попробуйте инициализировать его до фактического изображения или по крайней мере случайных целых чисел.

Cheers!

+0

спасибо, что сработало :) – Sharpie

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