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