4

我正在研究超像素以进行特征提取。我已经成功地将超像素功能应用于图像。

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))

在此处输入图像描述 如何为每个变量设置单独的变量

4

2 回答 2

2

尝试这个。我希望这将解决您提取每个像素的问题。我希望有人能解释一下 Gabor 的特性。

for i=1:size(Lout,1)
    for j=1:size(Lout,2)
        if (Lout (i,j) == 4)
            Patch(i,j)=A(i,j);
        end
    end
end


mask = Patch > 0;
mask = bwareafilt(mask, 1);
% Invert mask and get bounding box.
props = regionprops(mask, 'BoundingBox');
% Crop image.
croppedImage = imcrop(Patch, props.BoundingBox);
figure;imshow(croppedImage)
于 2018-05-10T06:45:37.107 回答
1

按照关于 Gabor features 的 MATLAB 教程,我可以将 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 个过滤器内核(请参阅文档gabor)。imgaborfilt将这些内核中的每一个(通过卷积)应用于图像Agray,即“kobi”图像的灰度值版本。gabormag现在是一个 3D 图像,有 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,:)超像素的 Gabor 特征L==294是在狗的鼻子上:

>> 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
于 2018-05-22T04:50:39.627 回答