Новосибирский Государственный Университет
Опубликован: 20.08.2013 | Доступ: свободный | Студентов: 858 / 36 | Длительность: 14:11:00
Самостоятельная работа 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).

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