void ShearTool::setPreviewImage() { ImageIface* const iface = d->previewWidget->imageIface(); int w = iface->previewSize().width(); int h = iface->previewSize().height(); DImg imTemp = filter()->getTargetImage().smoothScale(w, h, Qt::KeepAspectRatio); DImg imDest( w, h, filter()->getTargetImage().sixteenBit(), filter()->getTargetImage().hasAlpha() ); imDest.fill( DColor(d->previewWidget->palette().color(QPalette::Background).rgb(), filter()->getTargetImage().sixteenBit()) ); imDest.bitBltImage(&imTemp, (w-imTemp.width())/2, (h-imTemp.height())/2); iface->setPreview(imDest.smoothScale(iface->previewSize())); d->previewWidget->updatePreview(); ShearFilter* const tool = dynamic_cast<ShearFilter*>(filter()); if (tool) { QSize newSize = tool->getNewSize(); QString temp; d->newWidthLabel->setText(temp.setNum( newSize.width()) + i18n(" px") ); d->newHeightLabel->setText(temp.setNum( newSize.height()) + i18n(" px") ); } }
void NormalRadonTransform::radon(const cv::Mat& src, cv::Mat& dest) { float alpha, beta, sum, rho; float dx, cos_t, sin_t, r_offset, x_min; int w = src.rows; int h = src.cols; int T = 180; int R = sqrt(h * h + w * w); dx = 0.5f; x_min = -(h - 1.0) / 2 * dx; float thr = 1 / sqrt(2); cv::Mat_<uchar> imSrc = src; dest.create(T, R, src.type()); cv::Mat_<uchar> imDest = dest; for (int t = 0; t < T; t++) { float theta = t * CV_PI / 180; cos_t = cos(theta); sin_t = sin(theta); r_offset = x_min * (cos_t + sin_t); if (sin_t > thr) { alpha = -cos_t / sin_t; for (int r = 0; r < R; r++) { rho = r - (R - 1.0) / 2; beta = (rho / 2 - r_offset) / (dx * sin_t); sum = 0; for (int i = 0; i < h; i++) { int j = (int)(alpha * i + beta); if (j >= 0 && j < w) { sum += imSrc(i, j); } } imDest(t, r) = sum * dx / (sin_t * 100); }//for r }//for if else { alpha = -sin_t / cos_t; for (int r = 0; r < R; r++) { rho = r - (R - 1.0) / 2; beta = (rho / 2 - r_offset) / (dx * cos_t); sum = 0; for (int j = 0; j < w; j++) { int i = (int)(alpha * j + beta); if (i >= 0 && i < h) { sum += imSrc(i, j); } } //rad[t * R + r] = sum * dx / fabsf(cos_t); imDest(t, r) = sum * dx / (fabsf(cos_t) * 100); }//for r }//for else }//for t dest = dest.t(); }