0

画像の等高線を検出するプロジェクトがあり これますが、キャニー エッジ検出アルゴリズムを使用してコードを実行すると、画像の 1 本の線が 2 本の線に変換されます。これは、前後の線のグレー値が 2 倍変化するためです。それ 。

i= imread('path');
imgG= rgb2gray(i);

PSF = fspecial('gaussian',7,7);
Blurred = imfilter(imgG,PSF,'symmetric','conv');
figure ,imshow(Blurred)

edgeimg = edge(Blurred , 'canny');
figure ,imshow(edgeimg)

これを解決する方法がわかりません、助けてください。

4

1 に答える 1

0

最良の答えは、エッジを検出した後にエッジをどうしたいかによって異なりますが、線が純粋な黒で、他のすべてが純粋な白である画像を生成したいと仮定しましょう...

最も簡単な方法は、明るい灰色のピクセルが白く、暗い灰色のピクセルが黒くなるように画像をしきい値処理することです。画像を浸食して線の太さを減らすこともできますが、これによりサンプル画像の細かい輪郭が取り除かれることがわかります。

これを行うコードは次のとおりです (作業フォルダーに画像G4.jpgがあると仮定します)。

% load image and convert to double (0 to 1) as well as flip black and white
imG4 = imread('G4.jpg');
imG4_gs = 1 - mean(double(imG4)/255,3);

figure
image(64*(1 - imG4_gs))
colormap('gray');
axis equal

% image grayscale threshold
img_thr = 0.25;

% apply threshold to image
imG4_thr = imG4_gs >= img_thr;

figure
image(64*(1 - imG4_thr))
colormap('gray');
axis equal

% erode image (try "help imerode" in the MATLAB console)
imG4_ero = imerode(imG4_thr,strel('disk',1));

figure
image(64*(1 - imG4_ero))
colormap('gray');
axis equal;
于 2015-10-13T21:19:51.467 に答える