-1
clear_all();

image_name = 'canny_test.png';

% no of  pixels discarded on border areas
discard_pixels = 10;

% read image and convert to grayscale
input_image = gray_imread(image_name);

% discard border area
input_image = discard_image_area(input_image, discard_pixels);

% create a binary image
binary_image = edge(input_image,'canny');    
imshow(binary_image);

入力

ここに画像の説明を入力

期待される結果

ここに画像の説明を入力

実際の結果

ここに画像の説明を入力

ここでは、イメージの境界線が Canny Edge Detector によって検出されていることがわかりますが、これは私の予想した結果ではありません。

どうすればこれを達成できますか?


ソースコード

function [output_image] = discard_image_area( input_image, pixel_count)
    output_image = input_image;

    [height, width] = size(input_image);

    % discard top
    output_image(1:pixel_count, :) = 0;
    % discard bottom
    h = height - pixel_count;
    output_image(h:height, :) = 0;    
    % discard left
    output_image(:,1:pixel_count) = 0;
    % discard right
    output_image(:,(width-pixel_count):width) = 0;
end

function img = gray_imread( image_name )
    I = imread(image_name);

    if(is_rgb(I))
        img = rgb2gray(I);
    elseif (is_gray(I))
        img = I;
    end
end
4

2 に答える 2

1

答えは簡単です。関数discard_image_areaは、画像の境界付近で画像の値を 0 に変更します。

したがって、イメージ値と 0 の間にステップが作成さ
れます。これは、まさに Canny Edge Detector が探すものです。

機能を適用した後の画像を表示していただくとわかりやすいと思います。

その機能を使用しないでください。

于 2017-07-15T12:30:29.893 に答える