加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 23:46:32 所属栏目:大数据 来源:网络整理
导读:%%%% Cloud%%%% 利用perlin noise生成云彩clc;clear all;close all;addpath('E:PhotoShop AlgortihmImage ProcessingPS Algorithm');Image=imread('4.jpg');Image=double(Image);[row,col,layer]=size(Image);baseNoise=rand(row,col);persistance = 0.9;
%%%% Cloud
%%%% 利用perlin noise生成云彩

clc;
clear all;
close all;

addpath('E:PhotoShop AlgortihmImage ProcessingPS Algorithm');


Image=imread('4.jpg');
Image=double(Image);

[row,col,layer]=size(Image);

baseNoise=rand(row,col);

persistance = 0.9;
totalAmplitude = 0.0;

octaveCount=10;

Cloud_texture=zeros(row,col);

for i=0:octaveCount
    amplitude=persistance.^(octaveCount-i);
    % amplitude=persistance.^i;
    totalAmplitude=totalAmplitude+amplitude;
    Cloud_texture=Cloud_texture+Generate_smoothnoise(baseNoise,i)*amplitude;
end

Cloud_texture=Cloud_texture/totalAmplitude;

imshow(Cloud_texture);
   



function SmoothNoise=Generate_smoothnoise(baseNoise,octave)

SmoothNoise=baseNoise;

[row,col]=size(baseNoise);

samplePeriod=2.^octave;
sampleFrequency=1/samplePeriod;

for i=1:row
    sample_i0=floor((i/samplePeriod))*samplePeriod;
    sample_i1=mod(sample_i0+samplePeriod,row);
    vertical_blend = (i - sample_i0) * sampleFrequency;
    for j=1:col
        sample_j0 = floor(j / samplePeriod) * samplePeriod;
        sample_j1 = mod(sample_j0 + samplePeriod,col);
        horizontal_blend = (j - sample_j0) * sampleFrequency;
        
        if(sample_i0<1)
            sample_i0=1;
        end
        
        if(sample_i1<1)
            sample_i1=1;
        end
        
        if(sample_j1<1)
            sample_j1=1;
        end
        
        if(sample_j0<1)
            sample_j0=1;
        end
        
        % blend the top two corners
        top = Cosine_Interpolate(baseNoise(sample_i0,sample_j0),...
        baseNoise(sample_i0,sample_j1),horizontal_blend);
 
        % blend the bottom two corners
        bottom = Cosine_Interpolate(baseNoise(sample_i1,...
        baseNoise(sample_i1,horizontal_blend);
 
        % final blend
        SmoothNoise(i,j) = Cosine_Interpolate(top,bottom,vertical_blend);
    end
end



function  y=Cosine_Interpolate(x1,x2,alpha)


ft = alpha * 3.1415927;
f = (1 - cos(ft)) * .5;

y=x1*(1-f)+x2*f;


原图


效果图

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读