void BModel::load_src_image(const QString fileName) { _srcImage->load(fileName); if(!_srcImage->isNull()) { if(_filtImage) delete _filtImage; _filtImage = new QImage(get_src_image()); create_temp_image(_srcImage); emit src_image_loaded(); emit filt_image_changed(); } }
void BModel::wiener_filter(const int r, const double sigma, const double S) { IplImage *reKernel = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1); IplImage *image = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 4); IplImage *reRImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1); IplImage *reGImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1); IplImage *reBImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1); IplImage *kernel = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 2); IplImage *rImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 2); IplImage *gImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 2); IplImage *bImage = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 2); IplImage *imaginary = cvCreateImage(cvGetSize(_tempImageSrc), IPL_DEPTH_64F, 1); cvZero(imaginary); cvZero(reKernel); create_kernel(r, sigma, reKernel); cvConvertScale(_tempImageSrc, image, 1/255.); cvSplit(image, reRImage, reGImage, reBImage, 0); cvMerge(reKernel, imaginary, 0, 0, kernel); cvMerge(reRImage, imaginary, 0, 0, rImage); cvMerge(reGImage, imaginary, 0, 0, gImage); cvMerge(reBImage, imaginary, 0, 0, bImage); wiener_filter_chanel(rImage, kernel, S); cvSplit(rImage, reRImage, imaginary, 0, 0); wiener_filter_chanel(gImage, kernel, S); cvSplit(gImage, reGImage, imaginary, 0, 0); wiener_filter_chanel(bImage, kernel, S); cvSplit(bImage, reBImage, imaginary, 0, 0); cvMerge(reRImage, reGImage, reBImage, 0, image); cvConvertScale(image, _tempImageDst, 255); remap_image(_tempImageDst, -r); change_filt_image(); create_temp_image(_srcImage); cvReleaseImage(&reKernel); cvReleaseImage(&image); cvReleaseImage(&reRImage); cvReleaseImage(&reGImage); cvReleaseImage(&reBImage); cvReleaseImage(&kernel); cvReleaseImage(&rImage); cvReleaseImage(&gImage); cvReleaseImage(&bImage); cvReleaseImage(&imaginary); }
void BModel::median_filter(const int size) { cvSmooth(_tempImageSrc, _tempImageDst, CV_MEDIAN, size, size); change_filt_image(); create_temp_image(_srcImage); }
static inline void copy_to_drawable_from_pixmap(const RedDrawable_p* dest, const SpiceRect& area, const SpicePoint& offset, const PixelsSource_p* source, int src_x, int src_y) { pixman_image_t *src_surface = source->pixmap.pixman_image; XGCValues gc_vals; gc_vals.function = GXcopy; RedDrawable::Format screen_format; XImage *image; XShmSegmentInfo *shminfo; pixman_image_t *pixman_image; int screen; screen = dest->source.x_drawable.screen; screen_format = XPlatform::get_screen_format(screen); XChangeGC(XPlatform::get_display(), dest->source.x_drawable.gc, GCFunction, &gc_vals); if (source->pixmap.x_image != NULL && RedDrawable::format_copy_compatible(source->pixmap.format, screen_format)) { if (source->pixmap.shminfo) { XShmPutImage(XPlatform::get_display(), dest->source.x_drawable.drawable, dest->source.x_drawable.gc, source->pixmap.x_image, src_x, src_y, area.left + offset.x, area.top + offset.y, area.right - area.left, area.bottom - area.top, false); } else { XPutImage(XPlatform::get_display(), dest->source.x_drawable.drawable, dest->source.x_drawable.gc, source->pixmap.x_image, src_x, src_y, area.left + offset.x, area.top + offset.y, area.right - area.left, area.bottom - area.top); } } else { image = create_temp_image(screen, area.right - area.left, area.bottom - area.top, &pixman_image, &shminfo); pixman_image_composite32(PIXMAN_OP_SRC, src_surface, NULL, pixman_image, src_x + offset.x, src_y + offset.y, 0, 0, 0, 0, area.right - area.left, area.bottom - area.top); if (shminfo) { XShmPutImage(XPlatform::get_display(), dest->source.x_drawable.drawable, dest->source.x_drawable.gc, image, 0, 0, area.left + offset.x, area.top + offset.y, area.right - area.left, area.bottom - area.top, false); } else { XPutImage(XPlatform::get_display(), dest->source.x_drawable.drawable, dest->source.x_drawable.gc, image, 0, 0, area.left + offset.x, area.top + offset.y, area.right - area.left, area.bottom - area.top); } free_temp_image(image, shminfo, pixman_image); } XFlush(XPlatform::get_display()); }