Glass Effect - Artistic Effect

I want to give an effect to images where the resulting image will look as if we were looking at it through textured glass (not smooth / smooth) ... Please help me write a letter to create such an effect.

Here is an example of the type of effect I'm looking for

The first image is the original image, and the second image is the result that it is looking for.

+5
source share
2 answers

Start by creating a noise map with dimensions (width + 1) x (height + 1)that will be used to offset the original image. I suggest using perlin noise so that the offset is not random. Here's a good link on how to generate perlin noise.

Once we have noise, we can do something like this:

Image noisemap; //size is (width + 1) x (height + 1) gray scale values in [0 255] range
Image source; //source image
Image destination; //destination image
float displacementRadius = 10.0f; //Displacemnet amount in pixels
for (int y = 0; y < source.height(); ++y) {
    for (int x = 0; x < source.width(); ++x) {
        const float n0 = float(noise.getValue(x, y)) / 255.0f;
        const float n1 = float(noise.getValue(x + 1, y)) / 255.0f;
        const float n2 = float(noise.getValue(x, y + 1)) / 255.0f;
        const int dx = int(floorf((n1 - n0) * displacementRadius + 0.5f));
        const int dy = int(floorf((n2 - n0) * displacementRadius + 0.5f));
        const int sx = std::min(std::max(x + dx, 0), source.width() - 1); //Clamp
        const int sy = std::min(std::max(y + dy, 0), source.height() - 1); //Clamp
        const Pixel& value = source.getValue(sx, sy);
        destination.setValue(x, y, value);
    }
}
+4
source

I can’t offer you a specific example, but gamedev sections of forums and articles contain a lot of gold for image processing, 3d rendering, etc. For example, here the article talks about using convolution matrices to apply similar effects to images, which can be a good starting point.

+1
source

All Articles