均值滤波 ;众数;Brovey;

function test
M=imread('test.jpg');
MM=imnoise(M,'gaussian',0,0.02);
for i=1:3
    Dist(:,:,i)=Average(MM(:,:,i),3);
end
subplot(1,2,1);
imshow(MM);
subplot(1,2,2);
imshow(Dist);
imwrite(Dist,'testMatch.jpg');
end

function dist1=Average(src,kernel)
[row,col]=size(src);
dist=zeros(row-kernel+1,col-kernel+1);
if row>=kernel&&col>=kernel
    A=double(src);
    kernelMatrix=ones(kernel,kernel)/(kernel*kernel);
    for i=1:row-kernel+1
        for j=1:col-kernel+1
            Proceed=A(i:i+kernel-1,j:j+kernel-1);
            dist(i,j)=sum(sum(Proceed.*kernelMatrix));
            %只是说这个只是单纯的去除掉边缘值得一种循环思路
        end
    end
else
    disp('请重新传入kernel值!模板大于原始图像矩阵');
end
dist1=dist/255;
end



function test()
Majority('test.jpg',1);
end
function [max,maxindex]=Majority(src,band)%函数调用者通过指定相应波段
origin = imread(src);
[row,col,channels]=size(origin);
count=zeros(1,256);%统计各个像素出现的个数
for i=1:row
    for j=1:col
        index=origin(row,col,band)+1;
        count(1,index)=count(1,index)+1;
    end
end
%接下来进行寻找最大值
max=count(1,1);
maxindex=1;
for k=2:256
    if count(1,k)>max
        max=count(1,k);
        maxindex=k;
    end
end
%众数DN
maxindex=maxindex-1;
disp(strcat(strcat('众数为',int2str(maxindex)),strcat(',出现的次数为',int2str(max))));
end

**

Brovey

**
原影像
在这里插入图片描述

全色影像
在这里插入图片描述
变换后的影像
在这里插入图片描述

function test()
 msidata = read_ENVIimage('qb_boulder_msi.img');%获取多光谱影像数据,测试数据为4个波段,bsq的存储方式,分辨率为1024*1024
 pandata=read_ENVIimage('qb_boulder_pan.img');%获取全色波段的图像矩阵,大概为4096*4096,相对于分辨率提高了4倍
 Out=Brovey(msidata,pandata);
 figure
 imshow(msidata(:,:,1:3)/500);%uint16转换到0-1
 figure
 imshow(pandata/700);%uint16转换到0-1
 figure
 imshow(Out(:,:,1:3)/300);
end

function [Out]=Brovey(msi,pan)
[row1,col1,bands1]=size(msi);
[row2,col2]=size(pan);
rowscale=row2/row1;
colscale=col2/col1;
Out=zeros(row2,col2,3);
msi=double(msi);
pan=double(pan);
%对多波段影像进行重采样
ReampleMSI=zeros(row2,col2,bands1);
for i=1:bands1
    ReampleMSI(:,:,i)=ReSample(msi(:,:,i),rowscale,colscale);
end
%Brovey变换
for k=1:bands1-1
    for i=1:row2
        for j=1:col2
            Out(i,j,k)= pan(i,j)*ReampleMSI(i,j,k)/(ReampleMSI(i,j,1)+ReampleMSI(i,j,2)+ReampleMSI(i,j,3));
        end
    end
end

end



%%
function [B]=ReSample(A,row_scale,col_scale)
%实现图像的重采样,传入的参数是一个灰度波段的图像,k为将灰度图像采样的倍数
[row,col] = size(A);
B=zeros(row*row_scale,col*col_scale);  %这里针对实验数据是行和列增加4倍
%下面采样最邻近采样的方法进行采样,这个方法实际上针对于上采样来说就是将一个区域所有的值赋值为一样的
for i=1:row
    for j=1:col
        %上面的循环主要是找到大范围的点,下面的循环是进行具体值得赋值
        for n=0:row_scale-1 %0-3
            for m=0:col_scale-1 %0-3
                B(i*row_scale-n,j*col_scale-m)=A(i,j);
            end
        end
    end
end
%上面采样完毕之后就返回结果
end
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值