你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
利用三层动态模糊技术的飞雪场景合成(三)
 

for pointIter = 1:pointNumber

    %floor函数表示对小数进行向下取值

        row = floor(height * rowLocation(pointIter)); %获得每个雪花团的真正行坐标

        col = floor(width * colLocation(pointIter));%获得每个雪花团的真正列坐标

        xsize = floor(pointSize * rsize(pointIter));%获得每个雪花团的真正半长

        %防止行列坐标下溢

        if (row <= 0)

            row = 1;

        end

        if (col <= 0)

            col = 1;

        end

        %防止雪花团的大小为0

        if (xsize <= 0)

            xsize = 1;

        end

        %确定当前雪花团所占有的区域

        startRow = row - xsize;

        stopRow = row + xsize;

        startCol = col - xsize;

        stopCol = col + xsize;

        %进行边界处理,防止雪花团所占有的区域越出图像区域

        startRow = max(startRow,1);%防止行上溢

        stopRow = min(stopRow,height);%防止行下溢

        startCol = max(startCol,1);%防止列左溢

        stopCol = min(stopCol,width);%防止列右溢

        %对雪花团所占有的区域设定最高值255,以表示白色的雪花团

        maskImage(startRow:stopRow,startCol:stopCol) = 255;

end

%---------------------------------------------------------------------------------------------------------------------------------------

 

代码段1仅仅是对雪花团的位置和大小进行确定,所获得的雪花团都是一个个小正方块,不能直接用于和原始图像进行合成,而必须借助于静态模糊和动态模糊技术,才能获得比较真实的雪花团效果。代码段2采用了Matlab的两个函数fspecialimfilter,其中前者指定模糊算子,而后者用模糊算子对初始雪花团图像进行滤波处理。关于两者的详细说明,可参考Matlab在线帮助文档。

%---------------------------------------------------------------------------------------------------------------------------------------

%代码段2

function [outputMaskImage] = sub_constructSnowEffect(maskImage,style,hsize,sigma,len,theta)

%函数功能:

%   对随机雪花团的初始图像进行模糊处理

%参数说明:

%   输入参数:

%     maskImagesub_makeRandPoints的输出结果图像

%     style:决定是使用高斯模糊还是使用圆盘模糊,style1为高斯模糊,否则为圆盘模糊

%     hsize:用于控制高斯/圆盘模糊的模糊半径,该值越大,雪花团越模糊

%     sigma:用于控制高斯/圆盘模糊的模糊方差,该值越大,雪花团越模糊

%     len:用于控制动态模糊的程度,该值越大,雪花团动态模糊效果越明显

%     theta:用于控制雪花团动态运动方向,该值以逆时针方向为正方向

%   输出参数:

%     outputMaskImage:保存随机雪花团的动态模糊结果图像

%--------------------------------------------------------------------------

    if (nargin <= 1)%如果输入参数个数小于等于1,提示用户参数参数太少并返回主程序

        errordlg('Not enough input arguments!');

        return;

    end

    if (style == 1)

        h = fspecial('gaussian',hsize,sigma);%指定高斯模糊算子

        maskImage = imfilter(maskImage,h);%进行模糊滤波处理

        %figure,imshow(maskImage,[]);

    else

        h = fspecial('disk',hsize);%指定圆盘模糊算子

        maskImage = imfilter(maskImage,h);%进行模糊滤波处理

      end

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089