消除图像中两种颜色边缘的颜色过渡效果

时间:2016-10-13 01:23:33

标签: matlab image-processing filter

我不能为我的生活记住这次行动的召唤。定义操作使得所考虑的像素被内核窗口中的最高频率的像素值替换。

目的是消除在其他更突出的区域的边缘可能发现的外来颜色,并巩固到较小的颜色子集。

例如,考虑一下刚果的旗帜:

enter image description here

如果我们放大到两种颜色之间的边界,我们会观察到颜色过渡效果。

enter image description here

出于我的目的,上图中只有两种颜色,但对角线形状适合于边界颜色的混合。

1 个答案:

答案 0 :(得分:6)

这称为模式过滤器,因为您将用它的邻居的模式(或最常见的值)替换每个像素。

在MATLAB中,如果您有图像处理工具箱,则可以使用colfilt轻松执行此类过滤,这将在指定大小的邻域内应用提供的函数。

output = colfilt(data, [5 5], 'sliding', @mode)

更新

如果您不想处理边缘处的所有零填充,可以使用padarray向每侧应用3个像素的填充,然后执行过滤,然后删除额外的3个像素来自各个方面。

% Pad with replicates of the data
data = padarray(data, [3 3], 'replicate', 'both');

% Perform the filtering
new = colfilt(data, [5 5], 'sliding', @mode);

% Crop out the padding part
new = new(4:end-3,4:end-3);

如果要将其推广到大小为n的内核,可以使用以下函数:

function out = mode_filter(data, n)

    pad_size = ceil(n / 2);

    % Pad with replicates of the data
    data = padarray(data, [pad_size, pad_size], 'replicate', 'both');

    % Perform the filtering
    out = colfilt(data, [n n], 'sliding', @mode);

    % Crop out the padded part
    out = out((pad_size + 1):(end - pad_size), (pad_size + 1):(end - pad_size));
end
相关问题