【问题标题】:Canny edge detector is detecting the borders of the imagesCanny 边缘检测器正在检测图像的边界
【发布时间】:2017-07-15 11:47:31
【问题描述】:
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

【问题讨论】:

    标签: matlab canny-operator


    【解决方案1】:

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

    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);
    

    输出:

    【讨论】:

    • % there is no such this as gray_imread -- 这是我的自定义函数。
    • 您是否在问题的任何地方定义了它?没有。那么就没有这样的事情了
    • 是否有任何可用的内置 Matlab 函数,其工作方式与我的 discard_image_area 相同?
    • 我不知道!我不认为discard_image_area有什么问题
    【解决方案2】:

    答案很简单,您的函数discard_image_area 将图像值更改为靠近图像边界的0。

    因此它会在图像值和 0 之间创建 Step。
    这正是 Canny 边缘检测器所寻找的。​​p>

    应用该功能后显示图片即可轻松查看。

    只是不要使用那个功能。

    【讨论】:

    • Just don't use that function. --- 在这种情况下,边界线出现在图像的边缘。
    • @anonymous,所以裁剪它,不要将值设为 0。
    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多