Exemplo n.º 1
0
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();
    }
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
void BModel::median_filter(const int size)
{
    cvSmooth(_tempImageSrc, _tempImageDst, CV_MEDIAN, size, size);
    change_filt_image();
    create_temp_image(_srcImage);
}
Exemplo n.º 4
0
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());
}