《图像处理》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);

顶帽变换是指原始图像减去其开运算的图像

开运算可用于补偿不均匀的背景亮度,所以用一个大的结构元素做开运算后

然后用原图像减去这个开运算,就得到了背景均衡的图像,这也叫做是图像的顶帽运算

在经过开运算之后的图像基础之上进行全局阈值分割。

posted @ 2020-06-29 16:17  我脑子不好  阅读(744)  评论(0编辑  收藏  举报