Exemple #1
0
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

}
Exemple #3
0
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
}
Exemple #4
0
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;
}