Опубликован: 20.08.2013 | Уровень: для всех | Доступ: платный | ВУЗ: Новосибирский Государственный Университет
Самостоятельная работа 6:

Сравнение производительности некоторых алгоритмов в библиотеках OpenCV и IPP

< Самостоятельная работа 5 || Самостоятельная работа 6: 1234567
2.6.2. Функция вычисления эрозии

Реализацию функций для вычисления эрозии и дилатации средствами IPP мы выполним несколько по-другому. Дело в том, что представленные выше варианты вызовов функций erode() и dilate() из OpenCV выполняют обработку только внутренних пикселей исходного изображения. Таким образом, и в IPP-версии нам нет необходимости расширять матрицу изображения. Вместо этого мы можем соответствующим образом определить область интереса (ROI).

double erode_ipp(const Mat &srcImg, Mat &dstImg) 
{ 
  IppiMaskSize msk; 
  Ipp8u *pSrcData, *pDstData; 
  IppiSize srcSize, dstRoiSize; 
  clock_t start, finish; 
 
  srcImg.copyTo(dstImg); 
 
  start = clock(); 
  pSrcData = (Ipp8u *)srcImg.data; 
  pDstData = (Ipp8u *)dstImg.data; 
  srcSize.width = srcImg.size().width; 
  srcSize.height = srcImg.size().height; 
 
  msk = ippMskSize3x3; 
  dstRoiSize.width = srcImg.size().width - 2; 
  dstRoiSize.height = srcImg.size().height - 2; 
  ippiErode3x3_8u_C3R(pSrcData + 
    srcSize.width * 3 * 1 + 3 * 1, srcImg.step1(), 
    pDstData + srcSize.width * 3 * 1 + 3 * 1, 
    srcImg.step1(), dstRoiSize); 
 
  finish = clock(); 
 
  return double(finish - start) / CLOCKS_PER_SEC; 
} 
      
2.6.3. Функция вычисления дилатации

Реализация функции вычисления дилатации средствами IPP совпадает с таковой для функции эрозии за исключением вызова функции ippiDilate3x3_8u_C3R() вместо ippiErode3x3_8u_C3R().

double erode_ipp(const Mat &srcImg, Mat &dstImg) 
{ 
  IppiMaskSize msk; 
  Ipp8u *pSrcData, *pDstData; 
  IppiSize srcSize, dstRoiSize; 
  clock_t start, finish; 
 
  srcImg.copyTo(dstImg); 
 
  start = clock(); 
  pSrcData = (Ipp8u *)srcImg.data; 
  pDstData = (Ipp8u *)dstImg.data; 
  srcSize.width = srcImg.size().width; 
  srcSize.height = srcImg.size().height; 
 
  msk = ippMskSize3x3; 
  dstRoiSize.width = srcImg.size().width - 2; 
  dstRoiSize.height = srcImg.size().height - 2; 
  ippiDilate3x3_8u_C3R(pSrcData + 
    srcSize.width * 3 * 1 + 3 * 1, srcImg.step1(), 
    pDstData + srcSize.width * 3 * 1 + 3 * 1, 
    srcImg.step1(), dstRoiSize); 
 
  finish = clock(); 
 
  return double(finish - start) / CLOCKS_PER_SEC; 
}     
      
< Самостоятельная работа 5 || Самостоятельная работа 6: 1234567
Александра Максимова
Александра Максимова

При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка?
 

Алена Борисова
Алена Борисова

В лекции по обработке полутоновых изображений (http://www.intuit.ru/studies/courses/10621/1105/lecture/17979?page=2) увидела следующий фильтр:


    \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 2 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array} - \frac{1}{9} \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 1 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array}

В описании говорится, что он "делает изображение более чётким, потому что, как видно из конструкции фильтра, в однородных частях изображение не изменяется, а в местах изменения яркости это изменение усиливается".

Что вижу я в конструкции фильтра (скорее всего ошибочно): F(x, y) = 2 * I(x, y) - 1/9 I(x, y) = 17/9 * I(x, y), где F(x, y) - яркость отфильтрованного пикселя, а I(x, y) - яркость исходного пикселя с координатами (x, y). Что означает обычное повышение яркости изображения, при этом без учета соседних пикселей (так как их множители равны 0).

Объясните, пожалуйста, как данный фильтр может повышать четкость изображения?

Сергей Кротов
Сергей Кротов
Россия
Дмитрий Донсков
Дмитрий Донсков
Россия, Москва, Московский Авиационный Институт