【测绘专用】 MATLAB 四叉树分割遥感图像

MATLAB 四叉树分割遥感图像

四叉树是遥感图像处理里面常用的一种算法,我这里采用递归的方法来实现

数据处理的思路

对于图像矩阵,我是判断它的方差是否小于某个阈值,大于就继续分,小于就不分。
不分之后的处理就是,计算矩阵的平均值,然后把平均值赋给矩阵所有的元素。

算法流程图如下:

image_1d1de8tvfk7916it7l61eec19gm9.png-67.9kB

源代码

Nan_mean函数

用来计算矩阵平均值

function [m] = Nan_mean(x)
%Nan_mean 此处显示有关此函数的摘要
%   此处显示详细说明

x = x(:);
k = 1;
x0 = [];
for j = 1:length(x)
        if ( ~isnan(x(j)) )
            x0(k) = x(j);
            k = k+1;
        end
end
% && length(x0) > length(x)/2
if (~isempty(x0) && length(x0)/length(x) > 0.15)
    m = mean(x0)
else
    m = mean(x);
end

myvar函数

用来计算矩阵的方差

function [ re ] = myvar( x )
%MYVAR 此处显示有关此函数的摘要
%   此处显示详细说明
x = x(:);
num = sum(~isnan(x));
m = Nan_mean(x);
if (num == 0)
    re = 0;
else
    re = 0;
    for i = 1:length(x)
        if (~isnan(x(i)))
            re = re+(x(i)-m)^2;
        end
    end
    re = re / num;
end
end

FTree_tra函数

递归四叉树分割函数

function [p] = FTree_tra(x,min)
%FTree_tra 此处显示有关此函数的摘要
%   此处显示详细说明

p = x;

if (length(p) > 0)
yp = length(p(:,1));
xp = length(p(1,:));

xp0 = xp/2;
yp0 = yp/2;

child1 = p([1:yp0],[1:xp0]);
    child2 = p([1:yp0],[xp0+1:xp0*2]);
    child3 = p([yp0+1:yp0*2],[1:xp0]);
    child4 = p([yp0+1:yp0*2],[xp0+1:xp0*2]);

v = myvar(p);

if ((v > 0.005 ) && yp>min)
    
    child1 = FTree_tra(child1,min);
    child2 = FTree_tra(child2,min);
    child3 = FTree_tra(child3,min);
    child4 = FTree_tra(child4,min);
    
    p = [child1 child2;
    child3 child4];
else 
    if (Nan_mean(p) ~= 1 && length(p) > 0)
    p = ones(yp,xp).*Nan_mean(p);
    p(1:end,1,:)=nan;   %直接修改所有block的左、上边界为白色。
    p(1,1:end,:)=nan;
    flag2 = Nan_mean(p);
    
    end
   
end
end
end

参考结果

image_1d1dec8lu1q0jduhod71boshqj1m.png-197.4kB

存在的问题

可以看到在图像边缘部分,会出现一些较大的图块,这是因为计算图像边缘的时候,Nan_mean函数里头的

if (~isempty(x0) && length(x0)/length(x) > 0.15)

0.15这个阈值可能不是很合适,可能要调小一点吧。

欢迎大家留言交流!

  • 5
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值