Matlab填充影像中的无效值

7 篇文章 1 订阅
7 篇文章 0 订阅

当多个行政单元合并成一个影像时,在行政边界附近可能会产生一些无效值,如下图所示。

在这里插入图片描述

示例影像为分类结果图,值在1~5以内,无效值为127。
本文使用最邻近法给无效值赋值(3 * 3区域内类别数最多的值,如果最多的值有多个,则以第一个为准)。
影像的行政单元也不是规则的,即周边也存在大量的无效值。此时要是逐行遍历的话,运算量非常大。

此时的主要思路为:

  1. 原始影像A,将无效值赋为0后保存为B;
  2. 由于行政边界所造成的无效值多呈线状分布(可见上图),因此将B进行均值滤波,窗口可以大一些(程序中设置为25);
  3. 均值滤波后保存为C,C中为0点则为边界的无效值,识别后不参与运算;
  4. B == 0 && C != 0 的点则为目标点,进行最邻近插值(需要多次最邻近插值,需要外设一个循环)。
  5. 最邻近插值后,由于位于行政边界外的部分点也被识别为目标点了,因此需要使用行政边界(shp数据)进行裁剪。

第1~4步的参考代码如下。

%%
clc;
clear;

%%
% 获取.m所在的文件夹
fullpath = mfilename('fullpath');
[path, name] = fileparts(fullpath);

%%
filepath = strcat(path, '\oridata.tif');

[A, RA] = readgeoraster(filepath);
% 有效值在1~5之间,将无效值(127)赋为0
A(A > 10) = 0;
info = geotiffinfo(filepath);
B = A;

R = 25;
I_3 = fspecial('average', [51, 51]); %均值滤波
C = imfilter(A, I_3);

B(C == 0) = 127;

C = B;
R = 1;
for iti = 1 : 100
    
    [X, Y] = find(B == 0);
    xsi = size(X, 1);
    if xsi == 0
        continue;
    end
    
    for i = 1 : xsi
        [iti, i, xsi]
        xmin = X(i) - R;
        xmax = X(i) + R;
        ymin = Y(i) - R;
        ymax = Y(i) + R;
        
        if xmin < 1
            xmin = 1;
        end
        if xmax > max(X)
            xmax = max(X);
        end
        if ymin < 1
            ymin = 1;
        end
        if ymax > max(Y)
            ymax = max(Y);
        end
        
        T = B(xmin : xmax, ymin : ymax);
        F = T(T > 0 & T < 10);
        if size(F, 1) == 0
            continue;
        end
        C(X(i), Y(i)) = mode(F(:));
    end
    B = C;
end

outpath = strcat(path, '\fillnan.tif');
geotiffwrite(outpath, B, RA, 'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-Chin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值