应用滑动窗口操作后,如何设置边框像素的值?

时间:2012-11-11 22:25:09

标签: matlab image-processing sliding-window

在对MATLAB中的图像应用像stdfilt(i, ones(5, 5))这样的滑动窗口操作后,我想将边界像素(使用填充计算的像素)设置为NaN,以将它们标记为无意义。在此示例中,我将最外面的两行和每列设置为NaN。给定M * M窗口,如何将此边界(M-1)/ 2像素宽设置为特定值?

3 个答案:

答案 0 :(得分:3)

假设r是矩阵(stdfilt的结果)。以下是如何将NaN分配给边框的示例。 通常,您需要指定正确的索引。

>> r = rand(4)

r =

    0.8147    0.6324    0.9575    0.9572
    0.9058    0.0975    0.9649    0.4854
    0.1270    0.2785    0.1576    0.8003
    0.9134    0.5469    0.9706    0.1419

>> r([1, end], :) = nan

r =

       NaN       NaN       NaN       NaN
    0.9058    0.0975    0.9649    0.4854
    0.1270    0.2785    0.1576    0.8003
       NaN       NaN       NaN       NaN

>> r(:, [1, end]) = nan

r =

       NaN       NaN       NaN       NaN
       NaN    0.0975    0.9649       NaN
       NaN    0.2785    0.1576       NaN
       NaN       NaN       NaN       NaN

更新:一般情况下,由于图片是矩阵,您的问题是“如何设置某些矩阵值?”。答案是:“使用矩阵的索引”。有很多方法可以做到这一点(例如,通过构建索引矩阵,逻辑掩码或使用行/列坐标)。决定使用什么方法通常取决于此特定任务的操作速度。例如,如果您需要用NaN替换零,则使用逻辑掩码会更快:r(r == 0) = nan,依此类推。

答案 1 :(得分:0)

首先找到矩阵中NaN的位置。假设您的图像名称为A.

a = isnan(A);

这将创建matric a,在数字位置为0,在NaN位置为1。然后找到Nan元素的位置:

[x,y]=find(a==1);

然后将值V替换为:

for i=1:length(x)
   A(x(i),y(i)) = V;
end

答案 2 :(得分:0)

这将完成这项工作,但这似乎是图像处理工具箱中的那种功能。

mask = logical(ones(size(i)));
width = (m - 1) / 2;
mask(width + 1:size(i, 1) - width, width + 1:size(i, 2) - width) = 0;
i(mask) = NaN;