Преобразование C ++ в MATLAB - PullRequest
       10

Преобразование C ++ в MATLAB

2 голосов
/ 13 апреля 2011

Я пытаюсь преобразовать код 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

Спасибо всем, кто может помочь мне понять это.

1 Ответ

4 голосов
/ 13 апреля 2011

Прежде всего, ImageSize = (Image); не правильно.Это просто назначит Image на ImageSize.Вместо этого используйте 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...