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);
}
原图
效果图
OpenCV——Perlin Noise的更多相关文章
- Perlin Noise 及其应用
Perlin Noise 可以用来表现自然界中无法用简单形状来表达的物体的形态,比如火焰.烟雾.表面纹路等.要生成 Perlin Noise 可以使用工具离线生成,也可以使用代码运行时生成.最简单常用 ...
- 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise
Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱 ...
- python perlin noise
python 利用 noise 生成纹理. # -*- coding: utf-8 -*- """ Created on Mon Apr 23 20:04:41 2018 ...
- 利用perlin noise 生成 wood texture
%%% Perlin Noise %%% Wood_texture clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image P ...
- OpenCV - Add Noise的一些方法
噪声常用有两种:一种椒盐噪声,一种高斯噪声. import numpy as np def pepper_and_salt(src, proportion): """ : ...
- 利用Perlin nosie 完毕(PS 滤镜—— 分成云彩)
%%%% Cloud %%%% 利用perlin noise生成云彩 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image ...
- 利用Perlin nosie 完成(PS 滤镜—— 分成云彩)
%%%% Cloud %%%% 利用perlin noise生成云彩 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image ...
- GraphicsLab Project 之 Curl Noise
作者:i_dovelemon 日期:2020-04-25 主题:Perlin Noise, Curl Noise, Finite Difference Method 引言 最近在研究流体效果相关的模拟 ...
- python 不同版本下载资源
Unofficial Windows Binaries for Python Extension Packages by Christoph Gohlke, Laboratory for Fluore ...
随机推荐
- [Django] 查看orm自己主动运行的原始查询sql
django的文档看了非常多.也用了不少,有的时候感觉性能非常不好,知道非常多地方是惰性查询.可是对于复杂的逻辑.仅仅是表面上发现执行非常慢,机器资源消耗非常多.却不知道orm究竟是什么来转化成sql ...
- 一起talk C栗子吧(第八十四回:C语言实例--使用信号进行进程间通信一)
各位看官们,大家好,上一回中咱们说的是进程间通信的样例.这一回咱们说的样例是:使用信号进行进程间通信.闲话休提,言归正转. 让我们一起talk C栗子吧! 我们在上一回中提到过进程之间通信须要解决的三 ...
- 用C++设计一个不能被继承的类(转)
在Java 中定义了关键字final,被final修饰的类不能被继承. 首先想到的是在C++中,子类的构造函数会自动调用父类的构造函数.同样,子类的析构函数也会自动调用父类的析构函数.要想一个类不能被 ...
- Codeforces初体验
Codeforces印象 这两天抽时间去codeforces体验了一把. 首先,果然有众多大牛存在.非常多名人一直參加每周一次的比赛.积分2000+,并參与出题. 另外.上面题目非常多.预计至少一千题 ...
- PHP计算两个时间差的方法
<?php //PHP计算两个时间差的方法 $startdate="2010-12-11 11:40:00"; $enddate="2012-12-12 11:45 ...
- leetcode第一刷_Permutation Sequence
这道题还挺好的,假设你的思路是每次生成一个全排列,然后累计到k次,那么停下来吧.肯定超时了亲.. 微软今年的笔试题里有一道类似的,我之前已经提到过了.是唯独0和1的字符串,求第k个排列是什么样子的.这 ...
- libpcre.so.0 被删除怎么办?
删除 #rpm -e --nodeps pcre-6.6-1.1 1> wget http://mirror.centos.org/centos/6/os/i386/Packages/pc ...
- EhCache Monitor的使用
1.在http://ehcache.org/documentation/monitor.html#Installation_And_Configuration下载ehcache-monitor-kit ...
- Android对apk源代码的改动--反编译+源代码改动+又一次打包+签名【附HelloWorld的改动实例】
最近遇到了须要改动apk源代码的问题,于是上网查了下相关资料.编写了HelloWorld进行改动看看可行性,经过实验证明此方案可行,而且后来也成功用这种方法对目标apk进行了改动,仅仅只是须要改动的部 ...
- NVIDIA GPU架构与原理分析(一)——GPU简介与主流Fermi、Kepler架构GPU概述
1 GPU简介 图形处理单元GPU英文全称Graphic Processing Unit,GPU是相对于CPU的一个概念,NVIDIA公司在1999年发布GeForce256图形处理芯片时首先提出GP ...