0

グレーレベルがしきい値を超えるピクセルを考慮して、グレースケール画像に連結成分分析を適用したいと考えています。次に、長さがしきい値未満の連結要素を削除したいと思います。私を助けてください?MATLAB で次のコードを書きましたが、効率的ですか?
前もって感謝します。

%im = input image;
% alpha1 = 0.0001;
% alpha2 = 0.0001;
% [row col] = size(im);
% 
% 
% thr1 = mean(mean(im))-alpha1*std(std(im));
% BW = zeros(size(im));
% 
% for rr = 1:row
%     for cc = 1:col
%         if im(rr,cc)>thr2
%             BW(rr,cc) = 1;
%         else
%             BW(rr,cc) = 0;
%         end
%     end
% end
% 
% CC = bwconncomp(BW);
% area_in_pixels = cellfun(@length,CC.PixelIdxList);
% thr2 = mean(area_in_pixels)-alpha2*std(area_in_pixels);
% idx = find(area_in_pixels <= thr3);
% for  kk = 1:length(idx)
% aaa = idx(kk);
% BW(CC.PixelIdxList{aaa})=0;
% end
4

1 に答える 1

0

代わりに regionprops を試して、画像内のすべてのオブジェクトを抽出できます。以下のコードを使用すると、しきい値よりも小さいすべてのオブジェクトの位置を取得できます。これを操作したり、後で行う必要があることを実行したりできます...同様に、さまざまなオブジェクトを調べてグレーレベルを抽出し、それがしきい値を下回っている場合それらを操作します。

    % Threshold for the size in pixels that you want
    threshold = 100; 

    % read your image    
    rawimage = imread('yourimage.jpg');

    % create a 2D field by summing 
    im = sum(rawimage,3);

    % label all objects that have 8 neighbours    
    IMAGE_labeled = bwlabel(im,8); 

    % get the properties of all elements
    shapedata=regionprops (IMAGE_labeled,'all'); 

    % get those elements that are smaller in size (area) than the threshold
    index = find(cell2mat({shapedata(:).Area})<=threshold); 

    % make a contourplot of im
    figure
    contourf(im)
    hold on

    % creation of colormap with the size of all identified objects below the thres
    mycolormap = jet(size(index,2));

    % loop over all small objects, extraction of their position in the original file, plotting circles with different colors at the position of each small object

   imap = 1;
   mean_of_red = zeros(length(index),1);
   for i = index
      plot (shapedata(i).PixelList(:,1),shapedata(i).PixelList(:,2),'o','MarkerFaceColor',mycolormap(imap,:))
      mean_of_red(i) = mean(mean(im(shapedata(i).PixelList(:,1),shapedata(i).PixelList(:,1),1)));
      imap=imap+1; 
   end
于 2015-11-04T09:20:09.370 に答える