标签:
令
计算权重矩阵。设定方差
计算高斯模糊。设在一幅图像中的
补充:求变化率时,对于一元函数,即求导;对于二元函数,求偏导。
数字图像处理中,用一阶有限差分近似求取灰度值的梯度值(变化率)。
(即:使差商
例:计算一点
注意:
注意:双阈值做法是将候选像素点拼接成轮廓,轮廓的形成时对这些像素运用滞后性阈值。
1. clear all;
2. clc;
3. I = imread(‘rice.png‘);%读图
4. % I = rgb2gray(I);%灰度转换
5. I = double(I);%转化为双精度
6. [H,W] = size(I);%获取图像大小
7.
8. %% Step1:使用高斯滤波平滑图像
9.
10. B = [1 2 1;2 4 2;1 2 1];%高斯滤波系数
11. B = 1/16.*B;%高斯滤波模板 方差=0.8
12. A = conv2(I,B,‘same‘);%使用高斯模板进行卷积.计算二维卷积,结果与原图像大小相同
13.
14. %% Step2:计算梯度的幅值图像,角度图像.
15.
16. %Prewitt梯度模板
17. dx = [-1 0 1;-1 0 1;-1 0 1];%x方向的梯度模板
18. dy = [1 1 1; 0 0 0;-1 -1 -1];%y方向的梯度模板
19. gx = conv2(A,dx,‘same‘);%获取x方向的梯度图像.使用梯度模板进行二维卷积,结果与原图像大小相同
20. gy = conv2(A,dy,‘same‘);%获取y方向的梯度图像.使用梯度模板进行二维卷积,结果与原图像大小相同
21. M = sqrt((gx.^2) + (gy.^2));%获取幅值图像.大小与原图像相等.(.^)表示数组乘方
22. a = atan2(gy,gx);%获取弧度,范围:-pi~pi
23. a = a*180/pi;%将弧度转换为角度,得到角度图像,与原图像大小相等.
24.
25. %% Step3:对幅值图像进行应用非极大值抑制
26.
27. %首先将角度划分成四个方向范围:水平(0°)、-45°、垂直(90°)、+45°
28. for i = 1:H
29. for j = 1:W
30. if((a(i,j)>=-22.5) && (a(i,j)<0)||(a(i,j)>=0) && (a(i,j)<22.5) || (a(i,j)<=-157.5) && (a(i,j)>=-180)||(a(i,j)>=157.5)&&(a(i,j)<=180))
31. a(i,j) = 0;
32. elseif((a(i,j)>=22.5) && (a(i,j)<67.5) || (a(i,j)<=-112.5) && (a(i,j)>-157.5))
33. a(i,j) = -45;
34. elseif((a(i,j)>=67.5) && (a(i,j)<112.5) || (a(i,j)<=-67.5) && (a(i,j)>-112.5))
35. a(i,j) = 90;
36. elseif((a(i,j)>=112.5) && (a(i,j)<157.5) || (a(i,j)<=-22.5) && (a(i,j)>-67.5))
37. a(i,j) = 45;
38. end
39. end
40. end
41. %讨论对3x3区域的四个基本边缘方向进行非极大值抑制.获取非极大值抑制图像
42. Nms = zeros(H,W);%定义一个非极大值图像
43. for i=2:H-1
44. for j=2:W-1
45. if (a(i,j)==0 && M(i,j) == max([M(i,j), M(i,j+1), M(i,j-1)]))
46. Nms(i,j) = M(i,j);
47. elseif (a(i,j)==-45 && M(i,j) == max([M(i,j), M(i+1,j-1), M(i-1,j+1)]))
48. Nms(i,j) = M(i,j);
49. elseif (a(i,j)==90 && M(i,j) == max([M(i,j), M(i+1,j), M(i-1,j)]))
50. Nms(i,j) = M(i,j);
51. elseif (a(i,j)==45 && M(i,j) == max([M(i,j), M(i+1,j+1), M(i-1,j-1)]))
52. Nms(i,j) = M(i,j);
53. end;
54. end;
55. end;
56.
57. %% Step4:双阈值检测和连接边缘
58.
59. DT = zeros(H,W);%定义一个双阈值图像
60. TL = 0.1 * max(max(Nms));%低阈值
61. TH = 0.3 * max(max(Nms));%高阈值
62. for i = 1 : H
63. for j = 1 : W
64. if (Nms(i, j) < TL)
65. DT(i,j) = 0;
66. elseif (Nms(i, j) > TH)
67. DT(i,j) = 1 ;
68. %对TL<Nms(i, j)<TH 使用8连通区域确定
69. elseif ( Nms(i+1,j)>TH || Nms(i-1,j)>TH || Nms(i,j+1)>TH || Nms(i,j-1)>TH || Nms(i-1, j-1)>TH || Nms(i-1, j+1)>TH || Nms(i+1, j+1)>TH || Nms(i+1, j-1)>TH)
70. DT(i,j) = 1;
71. end;
72. end;
73. end;
74. figure, imshow(DT); %最终的边缘检测为二值图像
标签:
原文地址:http://blog.csdn.net/liuzhuomei0911/article/details/51345591