1

宿題の一環として、このパターン マッチングを実装する必要があります。目標は、「画像 coins4.tif でできるだけ多くの 0 (ゼロ) を検出する」ことです。
私はNGC機能を与えられました。そして、私はそれを使用する必要があります
。これは私のmain.mファイルです

Image = readImage('coins4.tif');
Pattern = readImage('zero.tif');
showImage(Image);
showImage(Pattern);
message = sprintf('Pattern matching Normalized Correlation');
PatternMatching(Image , Pattern);
uiwait(msgbox(message,'Done', 'help'));
close all


これは私の PatternMatching 関数です。

function [ output_args ] = PatternMatching( Image , Pattern )
% Pattern matching – Normalized Correlation
% Detect as many of the 0's (zeros) as you can in image coins4.tif.
% Use the 0 of the 10 coin as pattern.
% Use NGC_pm and find good threshold. Display original image with? detected regions marked using drawRect.

% NGCpm(im,pattern);
% drawRect(rectCoors,color);
% rectCoors = [r0,c0,rsize,csize]  - r0,c0 = top-left corner of rect.
%             rsize = number of rows, csize = number of cols
%
% color = an integer >=1 representing a color in the color wheel
%                   (curerntly cycles through 8 different colors

showImage(Image);
hold on
res = NGCpm(Image, Pattern);

 for i = 1:size(res,1)
     for j = 1:size(res,2)
         if res(i,j) > 0.9999
             drawRect([i j size(Pattern,1) size(Pattern,2)], 5)
         end
     end
 end

end

これは与えられた NGCpm.m ファイルです

function res=NGC_PM(im,pattern)
[n m]=size(pattern);
[im_row,im_col]=size(im);
if ~(var(pattern(:))==0)
     res = normxcorr2(pattern, im);
     res=res(n:im_row,m:im_col);   
else
    res=zeros(size(im)-size(pattern)+1);
end;
 res = 1-abs(res);  % res = abs(res);


これは私が見つけようとしているパターンであり、結果は私が得ているものです

コイン10のゼロパターンを使用して、できるだけ多くの「ゼロ」を見つけようとしています.

PatternMatching 関数のアルゴリズムに問題があるかどうかを理解しようとしています。NGCpm 機能は既に提供されているので、最適なしきい値をループするだけでよいのですが、正しいですか?
または、画像またはパターンをぼかす必要がありますか?

これは私が見つけようとしているパターンです

これが画像と結果です

4

1 に答える 1

2

これは、この機能の修正版です。

function [ output_args ] = patternMatching( Image , Pattern )
% Pattern matching – Normalized Correlation
% Detect as many of the 0's (zeros) as you can in image coins4.tif.
% Use the 0 of the 10 coin as pattern.
% Use NGC_pm and find good threshold. Display original image with? detected regions marked using drawRect.

% NGCpm(im,pattern);
% drawRect(rectCoors,color);
% rectCoors = [r0,c0,rsize,csize]  - r0,c0 = top-left corner of rect.
%             rsize = number of rows, csize = number of cols
%
% color = an integer >=1 representing a color in the color wheel
%                   (curerntly cycles through 8 different colors

showImage(Image);
hold on
res = 1-NGCpm(Image, Pattern);
normalized_corellation = uint8(255*res/max(max(res)));
res_thresh = thresholdImage(normalized_corellation,100);
 for i = 1:size(res_thresh,1)
     for j = 1:size(res_thresh,2)
         if res_thresh(i,j) > 0
             drawRect([i j size(Pattern,1) size(Pattern,2)], 5)
         end
     end
 end

end
于 2013-02-08T21:06:29.653 に答える