OpenCV——Perlin Noise

// define head function
#ifndef PS_ALGORITHM_H_INCLUDED
#define PS_ALGORITHM_H_INCLUDED

#include <iostream>
#include <string>
#include "cv.h"
#include "highgui.h"
#include "cxmat.hpp"
#include "cxcore.hpp"
#include "math.h"

using namespace std;
using namespace cv;

void Show_Image(Mat&, const string &);

#endif // PS_ALGORITHM_H_INCLUDED

/*

perlin noise.

*/

#include "PS_Algorithm.h"
#include <time.h>

using namespace std;
using namespace cv;

void Generate_smoothnoise(Mat& src, Mat& std, int octave);
float Cosine_Interpolate(float x1,float x2,float alpha);

#define pi 3.1415926

int main()
{
    string Img_name("4.jpg");
    Mat Img;
    Img=imread(Img_name);

    Mat Cloud(Img.size(), CV_32FC1);
    Mat Cloud_Temp(Img.size(), CV_32FC1);
    Mat Base_Noise(Img.size(), CV_32FC1);

    cv::randn(Base_Noise, 0.5, 0.25);
    // Show_Image(Base_Noise, "N1");

    float persistance = 0.8;
    float totalAmplitude = 0.0;
    float amplitude;
    int octaveCount=8;

    for (int i=0; i<octaveCount; i++)
    {
        amplitude=std::pow(persistance,(octaveCount-i));
        totalAmplitude=totalAmplitude+amplitude;
        Generate_smoothnoise(Base_Noise, Cloud_Temp, i);
        Cloud=Cloud+Cloud_Temp*amplitude;
    }

    Cloud=Cloud/totalAmplitude;

    Show_Image(Cloud, "out.jpg");
    imwrite("Out.jpg", Cloud*255);

    waitKey();

}

void Generate_smoothnoise(Mat& src, Mat& dst, int octave)
{
    src.copyTo(dst);

    int width=src.cols;
    int height=src.rows;
    float samplePeriod=pow(2,octave);
    float sampleFrequency=1/samplePeriod;

    int sample_i0, sample_i1;
    float vertical_blend, horizontal_blend;
    int sample_j0, sample_j1;
    float top, bottom;

    for (int i=0; i<height-1; i++)
    {
        sample_i0=(int)(i/samplePeriod)*samplePeriod;
        sample_i1=(int)(sample_i0+samplePeriod)%height;
        vertical_blend = (i - sample_i0) * sampleFrequency;
        for (int j=0; j<width-1; j++)
        {
            sample_j0 = (int)(j / samplePeriod) * samplePeriod;
            sample_j1 = (int)(sample_j0 + samplePeriod)% width;
            horizontal_blend = (j - sample_j0) * sampleFrequency;

            if (sample_i0<0)  sample_i0=0;
            if (sample_j0<0)  sample_j0=0;
            if (sample_i1<0)  sample_i1=0;
            if (sample_j1<0)  sample_j1=0;

            // blend the top two corners
            top = Cosine_Interpolate(src.at<float>(sample_i0,sample_j0),
                    src.at<float>(sample_i0,sample_j1), horizontal_blend);

            // blend the bottom two corners
            bottom = Cosine_Interpolate(src.at<float>(sample_i1,sample_j0),
                    src.at<float>(sample_i1,sample_j1), horizontal_blend);

            // final blend
            dst.at<float>(i,j) = Cosine_Interpolate(top, bottom, vertical_blend);

        }

    }

}

float Cosine_Interpolate(float x1,float x2,float alpha)
{
    float ft, f;
    float y;

    ft = alpha * pi;
    f = (1 - cos(ft)) * .5;
    y=x1*(1-f)+x2*f;

    return y;
}

// define the show image
#include "PS_Algorithm.h"
#include <iostream>
#include <string>

using namespace std;
using namespace cv;

void Show_Image(Mat& Image, const string& str)
{
    namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
    imshow(str.c_str(), Image);

}

原图

效果图

时间: 2024-12-25 06:29:38

OpenCV——Perlin Noise的相关文章

Perlin Noise

参考文献: 1 http://en.wikipedia.org/wiki/Perlin_noise 2 http://webstaff.itn.liu.se/~stegu/TNM022-2005/perlinnoiselinks/perlin-noise-math-faq.html 3 http://www.mrl.nyu.edu/~perlin/doc/oscar.html#noise 目的:Generate a perlin noise image 图一 perlin noise 图像 对于

利用perlin noise 生成 wood texture

%%% Perlin Noise %%% Wood_texture clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=imread('9.jpg'); Image=double(Image); [row,col,layer]=size(Image); baseNoise=Generate_basenoise(row, col); persistance

Chapter 4 Perlin Noise

为了获得炫酷的坚固纹理效果,大部分人使用某种形式的Perlin噪声, 这些都是以他们的发明家 Ken Perlin的名字命名的. Perlin纹理不会像这样返回白色噪点: 相反,它会返回类似于模糊白噪声的东西: Perlin噪声的一个关键部分是它是可重复的:它将3D点作为输入并始终返回相同的随机数.附近的点返回相似的数字.Perlin噪声的另一个重要部分是它简单快速,所以它通常以黑客身份进行.根据Andrew Kensler的描述,我将逐步构建这种攻击. 我们可以用一个随机数字的3D数组拼接所有

利用Perlin nosie 完成(PS 滤镜—— 分成云彩)

%%%% Cloud %%%% 利用perlin noise生成云彩 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=imread('4.jpg'); Image=double(Image); [row,col,layer]=size(Image); baseNoise=rand(row,col); persistance = 0.9; totalA

(转载)柏林噪声

原文:http://freespace.virgin.net/hugo.elias/models/m_perlin.htm 转自:http://www.azure.com.cn/article.asp?id=291 柏林噪声(Perlin Noise)(译) 原文链接:http://freespace.virgin.net/hugo.elias/models/m_perlin.htm 翻译:azure Many people have used random number generators

convas demo1

1 getContext 语法 Canvas.getContext(contextID) 参数 参数 contextID 指定了您想要在画布上绘制的类型.当前唯一的合法值是 "2d",它指定了二维绘图,并且导致这个方法返回一个环境对象,该对象导出一个二维绘图 API. 提示:在未来,如果 <canvas> 标签扩展到支持 3D 绘图,getContext() 方法可能允许传递一个 "3d" 字符串参数. 返回值 一个 CanvasRenderingCon

39. Volume Rendering Techniques

Milan Ikits University of Utah Joe Kniss University of Utah Aaron Lefohn University of California, Davis Charles Hansen University of Utah This chapter presents texture-based volume rendering techniques that are used for visualizing three-dimensional

一个小demo的开发日记(〇)

在大概两周(三周?)前,出于某些原因(w)我做了个小demo.(虽然因为各种各样的原因导致做它的时间只有一周多了…所以它还远没有完成OTL) 在目前看来,它主要的亮点啊啥的之类的东西大概可以用下面的(g)视(i)频(f)来代表w: 大概就是一个树木生长的过程,以及一个日夜交替(晚上的星星被gif几乎快压没了). (实际上才没这么点东西!但是没做完什么的TAT) 所用工具是Unity,不过为了性能全写的是Unlit Shader(按我的理解应该是不参与Unity5.x的GI(全局光照).这个Unl

Grand Theft Auto V (侠盗列车手5)图形研究

原文地址:http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study/ 原文的简介: GTA(侠盗猎车)系列自从1997年首部发售以来有了很大的进步,两年前,Rockstar发布的GTAV获得了成功,首日1100万套的销量打破了7项吉尼斯世界记录. 在PS3上游玩时,游戏的完成水准和技术质量给我留下了深刻印象.加载屏幕是最影响体验的:而在GTA中你可以游戏几个小时,在一个巨大的开放世界中驾车数百公里,而没有任何的中断.考