При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка? |
Новосибирский Государственный Университет
Опубликован: 20.08.2013 | Доступ: свободный | Студентов: 865 / 38 | Длительность: 14:11:00
Темы: Программирование, Графика и дизайн
Специальности: Программист, Системный архитектор
Теги:
Самостоятельная работа 6:
Сравнение производительности некоторых алгоритмов в библиотеках OpenCV и IPP
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; }