Как выполнить итеративный раздел (прямоугольные блоки) изображения в MATLAB? [Дубликат]

Это очень распространенная проблема, с которой мы сталкиваемся, борясь с «таинствами» JavaScript.

Давайте начнем с простой функции JavaScript:

function foo(){
// do something 
 return 'wohoo';
}

let bar = foo(); // bar is 'wohoo' here

Это простой синхронный вызов функции (где каждая строка кода выполняется одна за другой в последовательность), и результат будет таким же, как ожидалось.

Теперь добавим немного завихрения, введя небольшую задержку в нашей функции, чтобы все строки кода не выполнялись последовательно. Таким образом, он будет эмулировать асинхронное поведение функции:

function foo(){
 setTimeout( ()=>{
   return 'wohoo';
  }, 1000 )
}

let bar = foo() // bar is undefined here

Итак, вы идете, эта задержка просто сломала функциональность, которую мы ожидали! Но что именно произошло? Ну, на самом деле это довольно логично, если вы посмотрите на код. функция foo() после выполнения ничего не возвращает (таким образом, возвращаемое значение равно undefined), но оно запускает таймер, который выполняет функцию после 1s, чтобы вернуть «wohoo». Но, как вы можете видеть, значение, присвоенное бару, является немедленно возвращенным материалом из foo (), а не что-либо еще, что приходит позже.

Итак, как мы решаем эту проблему?

Давайте попросим нашу функцию для ОБЕЩАНИЯ. Обещание действительно о том, что это означает: это означает, что функция гарантирует, что вы предоставите любой результат, который он получит в будущем. поэтому давайте посмотрим на это в нашей маленькой проблеме выше:

function foo(){
   return new Promise( (resolve, reject) => { // I want foo() to PROMISE me something
    setTimeout ( function(){ 
      // promise is RESOLVED , when exececution reaches this line of code
       resolve('wohoo')// After 1 second, RESOLVE the promise with value 'wohoo'
    }, 1000 )
  })
}

let bar ; 
foo().then( res => {
 bar = res;
 console.log(bar) // will print 'wohoo'
});

Таким образом, резюме - для решения асинхронных функций, таких как вызовы на основе ajax и т. д., вы можете использовать обещание resolve значение (которое вы намерены вернуть). Таким образом, короче говоря, вы разрешаете значение вместо возврата в асинхронных функциях.

13
задан niton 16 April 2015 в 02:45
поделиться

3 ответа

Если myImage - ваше изображение 256x256, не будет ли это

image_top_left = myImage(1:128,1:128);
image_top_right = myImage(1:128,129:256);
image_bottom_left = myImage(129:256,1:128);
image_bottom_right = myImage(129:256,129:256);

?

12
ответ дан gnovice 25 August 2018 в 15:52
поделиться

blockproc - новое имя для blkproc (которое устарело). Его можно использовать для применения функции к каждому блоку изображения. Например, если вы хотите разделить матрицу I на блоки 8x8 и вычислить среднее значение для каждого блока, вы сделаете следующее:

B=blockproc(I, [8 8], @(x) mean(x.data(:)));

B - это матрица, содержащая средства блоков.

Здесь есть две вещи:

  • Спецификатор [8 8] указывает размер блоков, а не номер ] блоков.
  • Вы не получаете доступ к самим блокам вне функции, которую вы передаете blockproc. Если вам нужны сами блоки, вы должны сделать то, что предложил Адриен:
    A1=I(1:128, 1:128);
    A2=I(129:256, 1:128);
    A3=I(1:128, 129:256);
    A4=I(129:256, 129:256);
    
    Конечно, в реальной программе вы, вероятно, должны сделать это, используя цикл.
6
ответ дан knedlsepp 25 August 2018 в 15:52
поделиться

Лучше для вас сделать вашу программу для всех размеров изображений не только для 256 * 256.

[row, col]=size(your_image); mr = round(row/2); % median of rows mc = round(col/2); % median of columns % Now divide your image and call each of them separately and do what ever you want top_left = your_image(1:mr , 1:mc); top_right = your_image(1:mr , (mc+1):col); bot_left = your_image((mr+1):row , 1:mc); bot_right = your_image((mr+1):row , (mc+1):col); % final stage is to combining these parts again to return to its original shape Back_to_original = [top_left,top_right ; bot_left,bot_right];

% надеюсь, что это будет полезно для вас ,

1
ответ дан saif 25 August 2018 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: