%RGB图像分割
f = imread('spark.tif');
figure,imshow(f);
%选取感兴趣区域ROI
mask = roipoly(f);
R = immultiply(mask,f(:,:,1));
G = immultiply(mask,f(:,:,2));
B = immultiply(mask,f(:,:,3));
g = cat(3,R,G,B);
figure,imshow(g);
%找出平均矢量m和协方差矩阵C
[M,N,K] = size(g);
%重新排列g中的彩色元素
I = reshape(g,M*N,3);
%找出彩色像素的行索引
idx = find(mask);
I = double(I(idx,1:3));
%计算平均矢量m和协方差矩阵C
[C,m] = covmatrix(I);
%计算C的对角线元素并计算它们的平方根
%sd中的第一二三个元素是ROI区域中的红绿蓝分量的标准差
d = diag(C);
sd = sqrt(d);
%用欧几里得距离来计算
%以T的25倍作为阈值,这个值是最大标准差的近似
E25 = colorseg('euclidean',f,25,m);
subplot(2,2,1),imshow(E25);
%以T的50倍作为阈值
E50 = colorseg('euclidean',f,50,m);
subplot(2,2,2),imshow(E50);
%以T的75倍作为阈值
E75 = colorseg('euclidean',f,75,m);
subplot(2,2,3),imshow(E75);
%以T的100倍作为阈值
E100 = colorseg('euclidean',f,100,m);
subplot(2,2,4),imshow(E100);
%用Mahalanobis距离来计算
%以T的25倍作为阈值,这个值是最大标准差的近似
M25 = colorseg('mahalanobis',f,25,m,C);
subplot(2,2,1),imshow(M25);
%以T的50倍作为阈值
M50 = colorseg('mahalanobis',f,50,m,C);
subplot(2,2,2),imshow(M50);
%以T的75倍作为阈值
M75 = colorseg('mahalanobis',f,75,m,C);
subplot(2,2,3),imshow(M75);
%以T的100倍作为阈值
M100 = colorseg('mahalanobis',f,100,m,C);
subplot(2,2,4),imshow(M100);
下面分布显示原图像和所选取的ROI区域:
图1(原图像:木星的卫星表面区域的伪彩色图像)
图2(ROI区域:活火山喷射出来的熔岩——红色区域)
图3(选用欧几里得距离来分割所得的结果)
图4(选用Mahalanobis距离来分割所得的结果)
通过这样的两种处理,我们根据所得到的图像,从图像分析中,我们可以知道,相比于欧几里得距离分割算法来说,mahalanbis算法分割所得到的分割图像的效果更好(分割提取到的活火山的区域)。
若这对您有帮助的话,请您点个小赞吧,您的支持是我不断分享的源动力。非常感谢