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