| 
				 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的两个函数fspecial和imfilter,其中前者指定模糊算子,而后者用模糊算子对初始雪花团图像进行滤波处理。关于两者的详细说明,可参考Matlab在线帮助文档。 
%--------------------------------------------------------------------------------------------------------------------------------------- 
%代码段2 
function [outputMaskImage] = sub_constructSnowEffect(maskImage,style,hsize,sigma,len,theta) 
%函数功能: 
%   对随机雪花团的初始图像进行模糊处理 
%参数说明: 
%   输入参数: 
%     maskImage:sub_makeRandPoints的输出结果图像 
%     style:决定是使用高斯模糊还是使用圆盘模糊,style为1为高斯模糊,否则为圆盘模糊 
%     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 			
				 |