-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 边缘检测器正在检测图像的边界线,这不是我的预期结果。

我怎样才能做到这一点?


源代码

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 之间创建 Step。
这正是 Canny Edge Detector 所寻找的。

如果在应用该功能后显示图像,您可以轻松看到它。

只是不要使用该功能。

于 2017-07-15T12:30:29.893 回答
1

应用功能discard_image_area后应用edge。否则,被丢弃的区域显然是它的边界。即这样做:

image_name = 'canny_test.png';
discard_pixels = 10;
input_image =  rgb2gray(imread(image_name));  % there is no such this as gray_imread

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

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

imshow(binary_image);

输出:

输出

于 2017-07-15T12:36:35.453 回答