您的位置:首页 > 编程语言 > MATLAB

红外小目标检测matlab程序——基于《Infrared Small-Target Detection Using Multiscale Gray Difference Weighted Image》

2016-11-04 10:46 423 查看
阅读了论文《Infrared Small-Target Detection Using Multiscale Gray Difference Weighted Image Entropy》,小菜鸟决定用MATLAB实现一下



clear;clc;

K=3;

w=2;

c=0.5;

I=imread('3.jpg');

f=rgb2gray(I);

[M N]=size(f);

subplot(2,3,1);imshow(f);

title('原始图像');

%----------------------图像预处理 滤波----------------

K1=filter2(fspecial('average',7),f)/255; %均值滤波

K2=filter2(fspecial('gaussian',3,1.5),f)/255;%高斯滤波

K3=filter2(fspecial('motion',3,0),f)/255;%运动

K4= filter2(fspecial('disk',3),f)/255;%圆形区域均值滤波

K5= medfilt2(f,[7,7]); %中值滤波

subplot(2,3,2);imshow(K1);

title('改进后的图像1');

subplot(2,3,3);imshow(K2);

title('改进后的图像2');

subplot(2,3,4); imshow(K3);

title('改进后的图像3');

subplot(2,3,5);imshow(K4);

title('改进后的图像4');

subplot(2,3,6);imshow(K5);

title('改进后的图像5');

%%%%%%%%选用中值滤波

f=K5;

%----------------------计算图像的NWIE值----------------

D=zeros(1,K);%K为子窗口个数,这里取3,最大窗口尺寸为7*7

num=(M-8)*(N-8);

NWIE=zeros(1,num);

%外围像素不作处理

for i=5:M-4

   for j=5:N-4

       r=(N-8)*(i-5)+j-5+1;

       %计算多尺度灰度差异Dm

       for k=1:K

           avergray1 = avergray(f,i,j,k);

           avergray2 = avergray(f,i,j,K);

           Dk=(abs(avergray1-avergray2))^2;

            D(k)=Dk;

       end

       Dm=max(D);

       %计算局部熵H

       Hist=zeros(1,256);

       for p=i-w:i+w  %这里取5*5的窗口,w=2

           for q=j-w:j+w

               Hist(f(p,q)+1)=Hist(f(p,q)+1)+1;   %统计局部直方图

           end

       end

       Hist=Hist/sum(Hist);

       for k=1:256

           if Hist(k)~=0

                H=Hist(k)*log(1/Hist(k));  %局部熵

           end

       end

       f(i,j)=Dm*H;  %代替中心像素值

       NWIE(r)=Dm*H;%存储NWIE的值

   end

end

%----------------------计算阈值并分割----------------

%计算阈值

SNR=(max(NWIE)-mean(NWIE))/std(NWIE);

T=c*(max(NWIE)-mean(NWIE))+mean(NWIE);

%分割

figure,imshow(f),title('原图');

for i=1:M

   for j=1:N

       if f(i,j)>=T

           f(i,j)=255;

       else

           f(i,j)=0;

       end

   end

end

figure,imshow(f),title('结果图');

%%%%%计算区域平均灰度值的函数

function avergray = avergray(f,x,y,k)

%图像矩阵,中心像素坐标,子窗口序号

num=(2*k+1)^2;

gray=0;

for i=x-k:x+k

   for j=y-k:y+k      

       gray=gray+double(f(i,j));%????????

   end

end

avergray =uint8(gray/num);

 end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐