EDA365电子论坛网
标题:
基于matlab图像处理教程系列之图像分割(二)
[打印本页]
作者:
dapmood
时间:
2021-4-25 11:22
标题:
基于matlab图像处理教程系列之图像分割(二)
, K- B) {0 F) a& e2 p. {
一、简介
6 q# _! S9 K0 e1 b! ~' [
1.使用距离变换的分水岭分割
$ b! r9 W0 h# \8 J0 F4 S" ?
, k1 e1 \, M4 c( N" v
(1)距离变换
# w* U0 X& l D) g) o7 U
9 t+ N* ]( a3 b1 \1 ?* j
D = bwdist(BW);
8 G0 E$ |- O( M" h
+ z$ O* ~; ]5 m) @$ v
二值图像的距离变换是指从每个像素到最接近零值的像素的距离。
* `* u5 d7 G( B% b. }0 C
" s5 J: H# i7 F, I
(2)测地距离变换
- O; K, `* B, x/ q) u- K8 p. \! {
( ~" Y( ^ B3 z) x
D = bwdistgeodesic(BW,mask);
! @5 Z. v0 d7 D
4 p. ^6 N9 m$ E7 ?
2.使用梯度的分水岭分割
' Z K" {/ ]& a% ~4 U" ^! b4 t1 y
$ ]/ G) X" H/ k `& h- A
获取梯度图像:
|2 z8 w* q* l
1 Z7 A6 X) t- ?+ s8 R0 y4 C
h = fspecial(‘sobel’);
- ?% L* |! y5 ~/ A& Z
1 Q$ G# P$ O7 N0 h7 S4 ?
fd = tofloat(f);
9 l3 V0 d" G8 `5 s) y6 l. V2 s
1 i' Q; K* o! {& C# Y
g = sqrt(imfilter(fd, h, ‘replicate’) .^ 2 + …
5 R8 j ]0 h* ?% q% S% m* W! w
" [: l2 O6 R" V: Z, n
imfilter(fd, h’, ‘replicate’) .^ 2);
+ c2 |4 W3 F+ [8 p
$ i6 s- u, E0 P. G6 L3 r% ~
在使用针对分割的分水岭变换之前,常常使用梯度幅度对图像进行预处理。梯度幅度图像沿着物体的边缘有较高的像素值,而在其他地方则有较低的像素值。在理想的情况下,分水岭变换可得到沿物体边缘的分水岭脊线。若梯度图像直接进行分水岭变换可能会严重过分割,所以在计算分水岭变换之前可以先平滑梯度图像。
" v+ i1 a1 ?! R) k
% ~5 ^9 J( J+ L9 u
3.控制标记符的分水岭分割
' N' _0 z0 B7 V1 t2 {1 z
- J! C( l0 K4 N/ U" F; u3 X
(1)计算局部极小值区域
. b/ v+ _) k5 [& o$ K8 }
' d! f+ M. Y- C$ B" s. e l
rm = imregionalmin(f);
( y0 o, ^0 E7 X5 N" E" ?' d4 C: D
2 h* G+ N; ^) M$ c2 [8 f8 m# T# b& u
其中,f 是灰度图像,rm 是二值图像,rm 的前景像素标记出局部小区域的位置。
; k/ s. j, a6 _: ^- m0 h
2 P; X1 N* M9 L% x) U
(2)扩展极小值
: G* X3 y4 D2 u. W o8 S
1 D! _9 N) a" H" R! H7 b$ y
im = imextendedmin(f,h);
2 m. d' A$ _( O; Z6 o: E- W
% U4 `7 h7 j% e
其中,f 是灰度图像,h 是高度阈值,im 是一幅二值图像,im 的前景像素标记了深的局部小区域的位置。
$ B( C; U/ Y, s \4 q: w' Z
2 _5 P1 I; P0 @6 O" u/ Y$ l7 H; F- i
(3)强制最小
, Y' S9 U& C4 C6 P7 b; W+ G
; K9 i5 a5 h- w' c P
mp = imimposemin(f, mask);
5 O7 K, `( d. _/ x; a& ^, f
# w3 N. f6 q$ N# U
其中,f 是灰度图像,mask 是二值图像,mask 的前景像素标记了输出图像 mp 中局部最小区域的期望位置。通过在内部和外部标记符的位置覆盖局部最小区域,可以改进梯度图像,用于控制过分割的一种方法是基于标记符的概念。标记符是属于一幅图像的连通分量。我们希望有一个内部标记符集合,它们处在每个感兴趣物体的内部,而外部标记符集合包含在背景中。标记符的选择范围可以从简单过程到更复杂的方法,涉及尺寸、形状、位置、相对距离、纹理内容等等。指针是携带对分割有影响的先验知识的标记符。人们常常使用先验知识在每天的视觉中帮助解决分割和高级任务。最为熟悉的便是使用文本。因此,分水岭分割提供可以有效利用这些类型的知识的框架这一事实,是这一方法的突出优点。
1 c. S/ G3 _! M+ w# W, J
1 D* e1 G4 b0 U ~' J" t; @" R
+ a Y. l8 ^# h: f2 n, m
二、源代码
8 a0 U8 q1 k- P; H" c: H
6 j1 e6 J% u. q
%基于控制标记符的分水岭分割
[file,filepath]=uigetfile('*');
file=fullfile(filepath,file);
img=imread(file);%读图
imgsize=size(img);
if(numel(imgsize)>2)
i=rgb2gray(img);
else
i=img;
end;
imshow(i);title('灰度图');
pause;
%取阈值
[T,SM]=graythresh(i);
bw=im2bw(i,T);
imshow(bw);title('二值');
pause;
% % %%%%%%%%%%%%%%%%%%%%%%%%%%基于距离变换的分水岭分割%%%%%%%%%%%%%%%%%%%%%%
gc = ~bw;
% imshow(gc);
% pause;
D = bwdist(gc);
% figure,contour(-D,40);
imshow(-D,[]);title('距离变换图');
pause;
rm = imregionalmin(-D);%查看局部极小值区域
imshow(rm);title('查看局部极小值区域');
pause;
im = imextendedmin(-D,2);%扩展最小值
% figure,contour(im,40);
fim=i;
fim(im) = -255;
imshow(fim);title('合并后的局部极小值');%查看合并后的局部极小值
pause;
Lim = watershed(bwdist(im));
imshow(Lim,[]);title('基于距离变换的流域分割');
pause;
em = Lim == 0;
res=em|im;
imshow(res);%查看掩膜图像
title('掩膜图像');
pause;
g2 = imimposemin(i, im | em);
imshow(g2);
title('强制最小');
pause;
L2 = watershed(g2);
f2 = img;
f2(L2 == 0) = 255;
imshow(f2);
title('基于控制标记符的分水岭分割');
1 k& e+ J# e) i' K1 a1 Q
( H% t+ N1 Z9 r+ w6 H
( D1 q4 e: v& B2 f- [5 \/ X. P
' A1 ]4 `# g- I1 X; E6 b/ s) ]
三、运行结果
; G3 c$ t, D& J" U4 n0 u
3 s9 Q' U' [& X! K- c% k
2.png
(445.94 KB, 下载次数: 9)
下载附件
保存到相册
2021-4-25 11:21 上传
! O3 a* r8 Y" n1 e/ c$ m# R6 k
作者:
regngfpcb
时间:
2021-4-25 13:23
基于matlab图像处理教程系列之图像分割(二)
作者:
twel2e
时间:
2021-4-25 16:30
看一下
2 p0 m( e! q9 C! P3 x* f h' N# |
作者:
ldezgr
时间:
2021-4-26 08:50
今天晴天,很棒棒哦,加油哦
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2