我正在进行特征提取的超级混合我已经成功地将超像素函数应用到图像中。
A = imread('kobi.png');
[L,N] = superpixels(A,5);
figure
BW = boundarymask(L);
figure;imshow(imoverlay(A,BW,'cyan'),'InitialMagnification',67)
现在我想从每个片段中提取纹理特征(即Gabor特征)。
有谁能帮我解释一下如何在每个超级像素上应用Gabor特性?
更新:
idx=label2idx(L);
meanColor = zeros(N,3);
[m,n] = size(L);
for i = 1:N
meanColor(i,1) = mean(A(idx{i}));
meanColor(i,2) = mean(A(idx{i}+m*n));
meanColor(i,3) = mean(A(idx{i}+2*m*n));
end
numColors = 6;
[pidx,cmap] = kmeans(meanColor,numColors,'replicates',2);
cmap = lab2rgb(cmap);
Lout = zeros(size(A,1),size(A,2));
for i = 1:N
Lout(idx{i}) = pidx(i);
end
imshow(label2rgb(Lout))
如何为每个变量设置单独的变量
最佳答案
在MATLAB tutorial about Gabor features之后,我可以将Gabor滤波器组应用于“kobi”图像:
wavelengthMin = 4/sqrt(2);
wavelength = 2.^(0:4) * wavelengthMin;
deltaTheta = 45;
orientation = 0:deltaTheta:(180-deltaTheta);
g = gabor(wavelength,orientation);
A = imread('kobi.png');
Agray = rgb2gray(A);
gabormag = imgaborfilt(Agray,g);
g
在本例中包含20个过滤内核(请参见documentation to gabor
)imgaborfilt
将其中每个核(通过卷积)应用于图像Agray
,这是“kobi”图像的灰度版本gabormag
现在是一个三维图像,有20个平面,每个平面都是一个Gabor滤波器输出的大小。Gabor滤波器响应有时作为每个像素的特征在MATLAB教程中,它们应用局部平均,这意味着对于每个像素,Gabor特征是小邻域内滤波器响应的平均值对于与超级混合使用,平均每个超级混合中的过滤器响应是有意义的让我们重复您的代码以首先获得超级混合:
[L,N] = superpixels(A,500);
L
是有标签的图像:每个像素都有对应于超级像素ID的值这些标签从1开始并且是连续的。使用
regionprops
我们可以计算每个标记区域内的平均强度:K = size(gabormag,3);
gaborfeatures = zeros(N,K);
for ii=1:K
res = regionprops(L,gabormag(:,:,ii),'MeanIntensity');
gaborfeatures(:,ii) = [res.MeanIntensity]';
end
(您也可以使用
label2idx
并在其输出数组上迭代,就像您在编辑问题时所做的那样。)gaborfeatures
现在为每个超级像素包含一行,为每个Gabor特征包含一列例如,gaborfeatures(294,:)
是位于狗鼻子上的superpixelL==294
的Gabor特性:>> gaborfeatures(294,:)
ans =
1.0e+04 *
Columns 1 through 9
0.0008 0.0040 0.0171 0.0848 1.0617 0.0009 0.0040 0.0193 0.1304
Columns 10 through 18
0.7753 0.0008 0.0040 0.0165 0.0872 1.0672 0.0010 0.0046 0.0208
Columns 19 through 20
0.0842 0.6736
关于matlab - 每个超像素上的Gabor滤波器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50264064/