《图像处理》Matlab 操作
(练习记录)
图像处理基本都是处理灰度图,首先要把彩色图转为灰度图
x=rgb2gray(x)
边缘检测(算子比较)
BW_sobel=edge(x,'sobel');
BW_prewitt=edge(x,'prewitt');
BW_roberts=edge(x,'roberts');
函数 edge 处理后得到的图像都是二值图像。
[g,t] = edge(f, '算子名', T, dir);
f 是输入图像,T 是指定的阈值,dir 是指定的检测边缘的首选方向:'horizontal'、vertical‘或’both’(默认值)。
总结:Roberts算子是边缘检测算子中最简单的一种,Roberts算子是非对称的,而且不能检测45°倍数的边缘。Prewitt算子相比Sobel算子在计算上要简单一点,但是同意产生噪声。
Canny算子:
z1=edge(x,'canny',[0.05,0.2],1);
[g,t] = edge(f, 'canny', T, sigma);
Canny检测算子是 edge 函数中最强的边缘检测算子。T 是向量。T=[T 1 ,T 2 ],两个阈值,sigma 是平滑滤波器的标准差。如果 t 包括在输出参量中,t 就是二元矢量,其中包含该算法用到的两个阈值。如果 T 没有指定,就自动计算阈值。sigma 的默认值是 1。
一般情况下,T1 是T2 的 0.4 倍。
总结:Sobel、Prewitt、Roberts算子是近似导数寻找边缘;Canny算子是通过寻找 f(x,y)的梯度的局部最大值来发现边缘。梯度由高斯滤波器的微分来计算。该方法使用两个阈值检测强的和弱的边缘,如果它们被连接到强边缘,那么在输出中只包含弱边缘。因此,这种方法更适合用于检测真实的弱边缘。
梯度边缘检测:
利用算子的模板,分别再x,y方向对图像进行运算,得出结果。
Roberts算子举例:
x=double(x);
Hx=[-1 0;0 1];
Hy=[0 -1;1 0];
Gx=imfilter(x,Hx);
Gy=imfilter(x,Hy);
G_mag=sqrt(Gx.^2+Gy.^2);
Prewitt、Sobel算子同上。
全局门限分割:
使用 Otsu 方法进行全局阈值分割
T = graythresh(I);
计算全局阈值,T 可用于 imbinarize 及那个强度图像转换为二值图像。该 graythresh 函数使用 Otsu 方法,该方法使用最大类间方差法来计算阈值。
T2=graythresh(X);
BW2=im2bw(X,T2);
自适应门限(开运算):
se=strel('disk',10);
f1=imtophat(f,se);
顶帽变换是指原始图像减去其开运算的图像
开运算可用于补偿不均匀的背景亮度,所以用一个大的结构元素做开运算后
然后用原图像减去这个开运算,就得到了背景均衡的图像,这也叫做是图像的顶帽运算
在经过开运算之后的图像基础之上进行全局阈值分割。