void FilterGauss::apply() { #if defined(HAVE_IPP) IppiSize size; size.width = src_roi[0]->width; size.height = src_roi[0]->height; /* IppStatus status = */ ippiFilterGauss_8u_C1R( src[0] + (src_roi[0]->start.y * src_roi[0]->line_step) + (src_roi[0]->start.x * src_roi[0]->pixel_step), src_roi[0]->line_step, dst + (dst_roi->start.y * dst_roi->line_step) + (dst_roi->start.x * dst_roi->pixel_step), dst_roi->line_step, size, ippMskSize5x5 ); /* cout << "FilterGauss: ippiFilterGauss exit code: " << flush; switch (status) { case ippStsNoErr: cout << "ippStsNoErr"; break; case ippStsNullPtrErr: cout << "ippStsNullPtrErr"; break; case ippStsSizeErr: cout << "ippStsSizeErr"; break; case ippStsStepErr: cout << "ippStsStepErr"; break; case ippStsMaskSizeErr: cout << "ippStsMaskSizeErr"; break; default: cout << "Unknown status"; } cout << endl; */ #elif defined(HAVE_OPENCV) cv::Mat srcm(src_roi[0]->height, src_roi[0]->width, CV_8UC1, src[0] + (src_roi[0]->start.y * src_roi[0]->line_step) + (src_roi[0]->start.x * src_roi[0]->pixel_step), src_roi[0]->line_step); if (dst == NULL) { dst = src[0]; dst_roi = src_roi[0]; } cv::Mat dstm(dst_roi->height, dst_roi->width, CV_8UC1, dst + (dst_roi->start.y * dst_roi->line_step) + (dst_roi->start.x * dst_roi->pixel_step), dst_roi->line_step); cv::GaussianBlur(srcm, dstm, /* ksize */ cv::Size(5, 5), /* sigma */ 1.0); #endif }
void FilterSharpen::apply() { #if defined(HAVE_IPP) IppiSize size; size.width = src_roi[0]->width; size.height = src_roi[0]->height; IppStatus status; // base + number of bytes to line y + pixel bytes status = ippiFilterSharpen_8u_C1R( src[0] + (src_roi[0]->start.y * src_roi[0]->line_step) + (src_roi[0]->start.x * src_roi[0]->pixel_step), src_roi[0]->line_step, dst + (dst_roi->start.y * dst_roi->line_step) + (dst_roi->start.x * dst_roi->pixel_step), dst_roi->line_step, size ); if ( status != ippStsNoErr ) { throw fawkes::Exception("Sharpen filter failed with %i\n", status); } #elif defined(HAVE_OPENCV) if ((dst == NULL) || (dst == src[0])) { throw fawkes::Exception("OpenCV-based Sobel filter cannot be in-place"); } cv::Mat srcm(src_roi[0]->height, src_roi[0]->width, CV_8UC1, src[0] + (src_roi[0]->start.y * src_roi[0]->line_step) + (src_roi[0]->start.x * src_roi[0]->pixel_step), src_roi[0]->line_step); cv::Mat dstm(dst_roi->height, dst_roi->width, CV_8UC1, dst + (dst_roi->start.y * dst_roi->line_step) + (dst_roi->start.x * dst_roi->pixel_step), dst_roi->line_step); cv::Mat kernel(3, 3, CV_32F); float *kernel_f = (float *)kernel.ptr(); kernel_f[0] = -0.125; kernel_f[1] = -0.125; kernel_f[2] = -0.125; kernel_f[3] = -0.125; kernel_f[4] = 2.0; kernel_f[5] = -0.125; kernel_f[6] = -0.125; kernel_f[7] = -0.125; kernel_f[8] = -0.125; cv::Point kanchor(1, 1); cv::filter2D(srcm, dstm, /* ddepth */ -1, kernel, kanchor); #endif }
void FilterHipass::apply() { #if defined(HAVE_IPP) IppiSize size; size.width = src_roi[0]->width; size.height = src_roi[0]->height; IppStatus status; // base + number of bytes to line y + pixel bytes status = ippiFilterHipass_8u_C1R( src[0] + (src_roi[0]->start.y * src_roi[0]->line_step) + (src_roi[0]->start.x * src_roi[0]->pixel_step), src_roi[0]->line_step, dst + (dst_roi->start.y * dst_roi->line_step) + (dst_roi->start.x * dst_roi->pixel_step), dst_roi->line_step, size, ippMskSize3x3 ); if ( status != ippStsNoErr ) { throw fawkes::Exception("Hipass filter failed with %i\n", status); } #elif defined(HAVE_OPENCV) cv::Mat srcm(src_roi[0]->height, src_roi[0]->width, CV_8UC1, src[0] + (src_roi[0]->start.y * src_roi[0]->line_step) + (src_roi[0]->start.x * src_roi[0]->pixel_step), src_roi[0]->line_step); if (dst == NULL) { dst = src[0]; dst_roi = src_roi[0]; } cv::Mat dstm(dst_roi->height, dst_roi->width, CV_8UC1, dst + (dst_roi->start.y * dst_roi->line_step) + (dst_roi->start.x * dst_roi->pixel_step), dst_roi->line_step); cv::Mat kernel(3, 3, CV_32F); float *kernel_f = (float *)kernel.ptr(); kernel_f[0] = -1; kernel_f[1] = -1; kernel_f[2] = -1; kernel_f[3] = -1; kernel_f[4] = 8; kernel_f[5] = -1; kernel_f[6] = -1; kernel_f[7] = -1; kernel_f[8] = -1; cv::Point kanchor(1, 1); cv::filter2D(srcm, dstm, /* ddepth */ -1, kernel, kanchor); #endif }
void FilterDilation::apply() { #if defined(HAVE_IPP) IppStatus status; if (se == NULL) { // standard 3x3 dilation IppiSize size; size.width = src_roi[0]->width - 2; size.height = src_roi[0]->height - 2; if ((dst == NULL) || (dst == src[0])) { // In-place // std::cout << "Running in-place with standard SE" << std::endl; status = ippiDilate3x3_8u_C1IR(src[0] + ((src_roi[0]->start.y + 1) * src_roi[0]->line_step) + ((src_roi[0]->start.x + 1) * src_roi[0]->pixel_step), src_roi[0]->line_step, size); } else { // std::cout << "Running not in-place dilation with standard SE" << std::endl; status = ippiDilate3x3_8u_C1R(src[0] + ((src_roi[0]->start.y + 1) * src_roi[0]->line_step) + ((src_roi[0]->start.x + 1) * src_roi[0]->pixel_step), src_roi[0]->line_step, dst + ((dst_roi->start.y + 1) * dst_roi->line_step) + ((dst_roi->start.x + 1) * dst_roi->pixel_step), dst_roi->line_step, size); yuv422planar_copy_uv(src[0], dst, src_roi[0]->image_width, src_roi[0]->image_height, src_roi[0]->start.x, src_roi[0]->start.y, src_roi[0]->width, src_roi[0]->height); } } else { // we have a custom SE IppiSize size; size.width = src_roi[0]->width - se_width; size.height = src_roi[0]->height - se_width; IppiSize mask_size = {se_width, se_height}; IppiPoint mask_anchor = {se_anchor_x, se_anchor_y}; /* std::cout << "Dilation filter is running with the following parameters:" << std::endl << " ROI size: " << size.width << " x " << size.height << std::endl << " mask size: " << mask_size.width << " x " << mask_size.height << std::endl << " mask anchor: (" << mask_anchor.x << "," << mask_anchor.y << ")" << std::endl << std::endl; printf(" src buf: 0x%x\n", (unsigned int)src ); printf(" dst buf: 0x%x\n", (unsigned int)dst ); */ if ((dst == NULL) || (dst == src[0])) { // In-place status = ippiDilate_8u_C1IR(src[0] + ((src_roi[0]->start.y + (se_height / 2)) * src_roi[0]->line_step) + ((src_roi[0]->start.x + (se_width / 2)) * src_roi[0]->pixel_step), src_roi[0]->line_step, size, se, mask_size, mask_anchor); } else { //std::cout << "Running NOT in-place" << std::endl; status = ippiDilate_8u_C1R(src[0] + ((src_roi[0]->start.y + (se_height / 2)) * src_roi[0]->line_step) + ((src_roi[0]->start.x + (se_width / 2)) * src_roi[0]->pixel_step), src_roi[0]->line_step, dst + ((dst_roi->start.y + (se_height / 2)) * dst_roi->line_step) + ((dst_roi->start.x + (se_width / 2)) * dst_roi->pixel_step), dst_roi->line_step, size, se, mask_size, mask_anchor); yuv422planar_copy_uv(src[0], dst, src_roi[0]->image_width, src_roi[0]->image_height, src_roi[0]->start.x, src_roi[0]->start.y, src_roi[0]->width, src_roi[0]->height); } } if (status != ippStsNoErr) { throw fawkes::Exception("Morphological dilation failed with %i\n", status); } #elif defined(HAVE_OPENCV) cv::Mat srcm(src_roi[0]->height, src_roi[0]->width, CV_8UC1, src[0] + (src_roi[0]->start.y * src_roi[0]->line_step) + (src_roi[0]->start.x * src_roi[0]->pixel_step), src_roi[0]->line_step); if (dst == NULL) { dst = src[0]; dst_roi = src_roi[0]; } cv::Mat dstm(dst_roi->height, dst_roi->width, CV_8UC1, dst + (dst_roi->start.y * dst_roi->line_step) + (dst_roi->start.x * dst_roi->pixel_step), dst_roi->line_step); if (se == NULL) { cv::dilate(srcm, dstm, cv::Mat()); } else { cv::Mat sem(se_width, se_height, CV_8UC1); cv::Point sem_anchor(se_anchor_x, se_anchor_y); cv::dilate(srcm, dstm, sem, sem_anchor); } #endif }
int characteristicAssignment::set(const ParameterList &pParams) { QVariant param; bool valid; /* derive the targetType from the source table and pParams, skipping params we know don't describe targets. */ QStringList passedIn; foreach (Parameter p, pParams) { if (p.name() != "charass_id" && p.name() != "char_id" && p.name() != "mode" && p.name() != "showPrices") { passedIn << p.name(); } } if (! passedIn.isEmpty()) { ParameterList srcp; srcp.append("paramName", passedIn); MetaSQLQuery srcm("SELECT source.* FROM source WHERE source_key_param IN (" "<? foreach('paramName') ?>" " <? if not isfirst('paramName') ?>, <? endif ?>" " <? value('paramName') ?>" "<? endforeach ?>);"); XSqlQuery srcq = srcm.toQuery(srcp); if (srcq.first()) { QString paramName = srcq.value("source_key_param").toString(); param = pParams.value(paramName, &valid); if (valid) { _targetId = param.toInt(); _d->targetType = srcq.value("source_charass").toString(); _d->handleTargetType(); } } else if (ErrorReporter::error(QtCriticalMsg, this, tr("Error Finding Characteristic Information"), srcq, __FILE__, __LINE__)) { return Error_NoSetup; } } param = pParams.value("charass_id", &valid); if (valid) { _charassid = param.toInt(); populate(); } param = pParams.value("mode", &valid); if (valid) { if (param.toString() == "new") { _mode = cNew; } else if (param.toString() == "edit") { _mode = cEdit; } else if (param.toString() == "view") { _mode = cView; _char->setEnabled(false); _value->setEnabled(false); _buttonBox->setStandardButtons(QDialogButtonBox::Close); } } param = pParams.value("showPrices", &valid); if (valid) { _listpriceLit->show(); _listprice->show(); } param = pParams.value("char_id", &valid); if (valid) { for (int i = 0; i < _char->model()->rowCount(); i++) { QModelIndex idx = _char->model()->index(i, _d->idCol); if (_char->model()->data(idx) == param) _char->setCurrentIndex(i); } } return NoError; }