滤镜—径向模糊



          径向模糊:模拟前后移动相机或旋转相机拍摄物体产生的效果。

       一般模糊算法的基本思想是,目标图像(生成的图像)上的任何一点的颜色值都受源图像对应位置的点以及其附近的点的颜色值共同影响。比如高斯模糊就是将处理点附近的颜色平均值作为该点的颜色。

       而径向模糊的特点则是中心点颜色沿中心点指向外侧的一条直线上外扩散,远离中心点的点是不会影响比较靠近中心点的点。另外,由于颜色是向四处发散,则不同放射线上的颜色也不会相互影响。

       简而言之,就是说目标图像的点是对该点与中心点之间线段进行采样,求这些采样点的加权平均作为目标点。当然,有一定的采样距离,离目标点越近采样的越多些。

      下面是OpenCV代码和matlab代码。

#include 
#include 
#include 

using namespace cv;
using namespace std;

int num=30;//num:采样点数目;

int main()
{
	Mat src = imread("sex.jpg",1);
	Mat src1u[3];
	split(src,src1u);

	int width=src.cols;
	int heigh=src.rows;
	Mat img;
	src.copyTo(img);
	Point center(width/2,heigh/2);


	for (int y=0; y(y);

		for (int x=0; x0?(R-i):0;
				
				int newX = tmpR*cos(angle) + center.x;
				int newY = tmpR*sin(angle) + center.y;
				
				if(newX<0)newX=0;
				if(newX>width-1)newX=width-1;
				if(newY<0)newY=0;
				if(newY>heigh-1)newY=heigh-1;

				tmp0 += src1u[0].at(newY,newX);
				tmp1 += src1u[1].at(newY,newX);
				tmp2 += src1u[2].at(newY,newX);

			}
			imgP[3*x]=(uchar)(tmp0/num);
			imgP[3*x+1]=(uchar)(tmp1/num);
			imgP[3*x+2]=(uchar)(tmp2/num);
		}
		
	}
	imshow("径向模糊",img);
	waitKey();
}

       Matlab代码:

clear all;close all;clc

img=imread('sex.jpg');
[h, w, c]=size(img);
imshow(img)

imgn=zeros(h,w,c);
for y=1:h
   for x=1:w
       r=sqrt((y-h/2)^2+(x-w/2)^2); 
       ang=atan2(y-h/2,x-w/2);
             
       pix=[0 0 0];
       pixNum=0;
              
       for i=0:1:10          
           %r-i是距离当前像素的距离为r-i的像素,在当前像素和中心像素同一条直线上
           yy=round(abs(r-i)*sin(ang)+h/2); 
           xx=round(abs(r-i)*cos(ang)+w/2);
           if yy>=1 && yy<=h && xx>=1 && xx<=w
                pix(1)=pix(1)+double(img(yy,xx,1));
                pix(2)=pix(2)+double(img(yy,xx,2));
                pix(3)=pix(3)+double(img(yy,xx,3));
                pixNum=pixNum+1;
           end
       end
      
       pix(1)=pix(1)/pixNum;
       pix(2)=pix(2)/pixNum;
       pix(3)=pix(3)/pixNum;
       imgn(y,x,:)=pix;
   end
end

figure;
imshow(imgn/255,[]);

         注意,这里采样点是等距离的,效果可能不算是太好。另外,通过添加角度变差,可以达到旋转径向模糊效果。

         测试图片及效果:

滤镜—径向模糊_第1张图片 滤镜—径向模糊_第2张图片
滤镜—径向模糊_第3张图片


         径向模糊的原理还可以参考这里http://www.cnblogs.com/flash3d/archive/2012/02/15/2353169.html



你可能感兴趣的:(Digital,Image,Processing)