# 实验五：边缘检测

Modified: 2014/03/31 12:55 by admin - Uncategorized

```

sobel_x = [-1  0  1;
-2  0  2;
-1  0  1];

sobel_y = [-1 -2 -1;
0  0  0;
1  2  1];

gra_x = templateFilter(img, sobel_x);
gra_y = templateFilter(img, sobel_y);

[h,w] = size(img);
gra = zeros(h-2, w-2);
for y=2:h-1
for x=2:w-1
gra(y-1,x-1) = (gra_x(y,x).^2 + gra_y(y,x).^2).^0.5;
end
end

gra = (gra - min(min(gra)))/(max(max(gra))-min(min(gra)));
threshold = 0.45;
edge = zeros(h-2, w-2);
for y=2:h-3
for x=2:w-3
if(    gra(y,x) >= threshold)
edge(y,x)=1;
end
end
end

imshow(edge);

```

```
function newimg = templageFilter(img, T)

[h,w] = size(img);
[Th,Tw] = size(T);

% augmented image
augh = floor(Th/2);
augw = floor(Tw/2);
timg = zeros(h+augh*2, w+augw*2);
% output image
newimg = zeros(h,w);

% initialize augmented image
for y=1:h
timg(y+augh, (augw+1):(w+augw)) = img(y,:);
end

% calculate output image
% for every pixel of the output image
for y=1:h
for x=1:w
sum = 0;
% for every pixel of the template
for Ty=1:Th
for Tx=1:Tw
sum = sum + T(Ty,Tx) .* timg(y+Ty-1,x+Tx-1);
end
end
% set the pixel value
newimg(y,x)=sum;
end
end
end

```

The end