matlab画像検出処理——図形検出

1807 ワード

このブログは自分がよく忘れているので、メモを取っているだけです.

一般的な操作:


1、二値化

clc
A=imread('a.jpg');   %    
thresh = graythresh(A);     % 
I2 = im2bw(A,thresh);       % 
 
figure(1)
imshow(A)     % 
figure(2)
imshow(I2)    % 

threshは二値化の閾値であり、0から1の間でサイズを自分で決定することができる.

2、エッジ検出


エッジ検出によく使われる5種類

1、Robert演算子エッジ検出

BW1=edge(I,'Roberts',0.16);
imshow(BW1);

2、Sobel演算子エッジ検出

BW2=edge(I,'Sobel',0.16);
imshow(BW2);

3、Prewitt演算子エッジ検出

BW3=edge(I,'Prewitt',0.06);
imshow(BW3);

4、LOG演算子エッジ検出

BW4=edge(I,'LOG',0.012);
imshow(BW4);

5、Canny演算子エッジ検出

BW5=edge(I,'Canny',0.35);
imshow(BW5);

単純常用円検出:imfindcircles


例;[c,r]=imfindcircles(image,[circles 1,circles 2])、imageは検出画像マトリクス、circles 1,circles 2はそれぞれ円検出の半径であり、すなわち検出可能な円半径範囲を決定する.注意:円検出半径範囲が大きいとプログラム速度が遅くなります.
円を検出した後、画像に対応する円と円心を直接描くことができます:viscircles(c,r,'EdgeColor','b');ここでcは円心座標,rは円半径,‘EdgeColor’,‘b’はそれぞれ円を描くパラメータである.
[c,r]=imfindcircles(image,[circles1,circles2]);
figure
imshow(image)
viscircles(c, r,'EdgeColor','b');

 

連通ドメイン検出共通関数


bwlabel  ;regionprops
[B,L]=bwlabel(B0);
img_reg = regionprops(B, 'all'); 

 
img_regbは閉鎖領域の構造体で、中で最もよく使われているのはCentroidです:閉鎖領域の質量心;BoundingBox:長方形の境界;PixelList連通領域座標

連通ドメイン境界検出


[B,L] = bwboundaries(image)
1.Bは、P x 1の配列である、ここで、Pは、連通体の個数を表す.B内の各行はQ x 2の行列である、Q内の各行は連通体の境界画素の位置座標(第1列は縦座標Y、第2列は横座標X)を表し、Qは境界画素の個数である.
2.Lはタグマトリクスである.