用mat2gray函数提取
需要注意的是mat2gray函数无法作用与复数
所以我们在这之前要abs
clc,clear;
img = imread('lena.jpg');
I = im2double(img);
r=I(:,:,1);
g=I(:,:,2);
b=I(:,:,3);
sob1=fspecial('sobel');
sob2=sob1';
Rx = imfilter(r, sob1,'replicate');
Ry = imfilter(r, sob2,'replicate');
Gx = imfilter(g, sob1,'replicate');
Gy = imfilter(g, sob2,'replicate');
Bx = imfilter(b, sob1,'replicate');
By = imfilter(b, sob2,'replicate');
gxx=Rx.^2+Gx.^2+Bx.^2;
gxy=Ry.^2+Gy.^2+By.^2;
gyy=Rx.*Ry+Gx.*Gy+Bx.*By;
theta1=1/2*atan(2*gxy./(gxx-gyy+eps))
F_theta1=(0.5*((gxx+gyy)+(gxx-gyy).*cos(2*theta1)+2*gxy.*sin(2*theta1)));
F_theta1=F_theta1.^0.5;
theta2=theta1+pi/2;
F_theta2=(0.5*((gxx+gyy)+(gxx-gyy).*cos(2*theta2)+2*gxy.*sin(2*theta2)))
F_theta2=F_theta2.^0.5;
I1=max(F_theta1,F_theta2);
I1=abs(I1);
I1 = mat2gray(I1);
imshow(I1)
title('//');