傅里叶变换之低通滤波、sobel边缘检测之matlab实现
滤波是傅里叶变换的一个主要应用,因为在频域中可以更好的理解图像以及了解如何对它进行处理。
以下是低通滤波的:
function output = low_filter(image,value) %Retain centred transform components inside circle of radius % % Usage: new image = low_filter(image,number) % % Parameters: image - array of points % value - radius of filter %get dimensions [rows,cols]=size(image); %filter the transform for x = 1:cols %address all columns for y = 1:rows %address all rows if (((y-(rows/2))^2)+((x-(cols/2))^2)-(value^2))>0 output(y,x)=0; %discard components outside the circle else output(y,x)=image(y,x); %and keep the ones inside end end end
计算哈特利变换
输出真实的图像作为结果:
function trans = Hartley(image) % Usage: [new image] = Hartley(image) % % Parameters: image - array of points %get dimensions [rows,cols]=size(image); trans(1:rows,1:cols)=0; %compute transform for u = 1:cols %address all columns for v = 1:rows %address all rows sum=0; for x = 1:cols %address all columns for y = 1:rows %address all rows %Eq. 2.41 mux=2*pi*(u-1)*(x-1)/cols; nvy=2*pi*(v-1)*(y-1)/rows; sum=sum+(image(y,x)*(cos(nvy)+sin(nvy))*(cos(mux)+sin(mux))); end end trans(v,u)=sum/sqrt(rows*cols); end end
sobel 边缘检测
function edge = Sobel_edges(image) % Gives Sobel for Canny operator % % Usage: [new image] = Sobel_edges(image) % % Parameters: image - array of points %get dimensions [rows,cols]=size(image); %set the output image to black (0) edge(1:rows,1:cols,3)=0; %then form the difference for x = 2:cols-1 %address all columns except border for y = 2:rows-1 %address all rows except border Sobel_y=image(y+1,x+1)+2*image(y+1,x)+image(y+1,x-1)-... image(y-1,x+1)-2*image(y-1,x)-image(y-1,x-1); Sobel_x=image(y-1,x+1)+2*image(y,x+1)+image(y+1,x+1)-... image(y-1,x-1)-2*image(y,x-1)-image(y+1,x-1); edge(y,x,1)=Sobel_x; edge(y,x,2)=Sobel_y; edge(y,x,3)=floor(sqrt(Sobel_x*Sobel_x+Sobel_y*Sobel_y)); end end
参考资料:计算机视觉特征提取与图像处理 Mark S.Mixon
- 上一篇 »教你如何用python数字图像处理做图像滤波效果!?
- 下一篇 »CNN卷积神经网络总结