%--------------------------------------------------------
% 特征提取
%--------------------------------------------------------
% img: 待分类的图像
% feature1: 幅度波谱向量
% n: 提取特征的目标点数
function [feature1,n] = featuredraw(img)
% 图像格式转换
ima=im2double(img);
imb=rgb2gray(img);
imb=im2double(imb);
% 获取图像尺寸
[x y z]=size(ima);
row=x; clu=y;
% -----------------初始化窗口尺寸与特征存储矩阵 ----------------
% 设定窗口尺寸
a=3; b=3; %窗口尺寸为 2a+1 * 2b+1
z=double(zeros(1,256));
m=double(zeros(1,256));
sum=zeros([x-2*a y-2*b 5]);
% 建立特征存储矩阵
feature=zeros([3 7]);
% RGB三波段数据分离
RT=ima(:,:,1); GT=ima(:,:,2); BT=ima(:,:,3);
% ----------------遍历样本区,统计目标特征 ----------------
for i=(a+1):(x-a)
for j=(b+1):(y-b)
% 建立窗口
win=zeros([x y]);
win((i-a):(i+a),(j-b):(j+b))=1;
% 加窗
W=win.*imb;
WINR1=W((i-a):(i+a),(j-b):(j+b));
WINR1= uint8(WINR1*255); %将像素值变为0-255之内,以便计算该图像的
%特征值。
% R通道加窗
WR=win.*RT;
WINR=WR((i-a):(i+a),(j-b):(j+b));
% G通道加窗
WG=win.*GT;
WING=WG((i-a):(i+a),(j-b):(j+b));
% B通道加窗
WB=win.*BT;
WINB=WB((i-a):(i+a),(j-b):(j+b));
% 幅度特征提取
FFTR=fft2(WINR);FFTG=fft2(WING);FFTB=fft2(WINB);
FR=mean2(FFTR);FG=mean2(FFTG);FB=mean2(FFTB);
RER=real(FR);IMR=imag(FR);REG=real(FG);IMG=imag(FG);REB=real(FB);IMB=imag(FB);
fuduR=sqrt(RER^2+IMR^2);fuduG=sqrt(REG^2+IMG^2);fuduB=sqrt(REB^2+IMB^2);
feature1(i-a,j-b,1)=fuduR; feature1(i-a,j-b,2)=fuduG;feature1(i-a,j-b,3)=fuduB;
% 纹理特征提取
for c=1:(2*a+1)
for d=1:(2*b+1)
k=WINR1(c,d);
z(k+1)=z(k+1)+1;
end
end
for k=1:256
z(k)=z(k)/((2*a+1)*(2*b+1));
m((i-a),(j-b))=k*z(k);
sum((i-a),(j-b),1)=sum((i-a),(j-b),1)+m((i-a),(j-b));
u1=(k-sum((i-a),(j-b),1))*z(k);
sum((i-a),(j-b),2)=sum((i-a),(j-b),2)+u1;
feature1(i-a,j-b,4)=sum((i-a),(j-b),2);
u2=(k-sum((i-a),(j-b),1))*(k-sum((i-a),(j-b),1))*z(k);
sum((i-a),(j-b),3)=sum((i-a),(j-b),3)+u2;
feature1(i-a,j-b,5)=sum((i-a),(j-b),3);
u3=(k-sum((i-a),(j-b),1))*(k-sum((i-a),(j-b),1))*(k-sum((i-a),(j-b),1))*z(k);
sum((i-a),(j-b),4)=sum((i-a),(j-b),4)+u3;
feature1(i-a,j-b,6)=sum((i-a),(j-b),4);
u4=(k-sum((i-a),(j-b),1))*(k-sum((i-a),(j-b),1))*(k-sum((i-a),(j-b),1))*(k-sum((i-a),(j-b),1))*z(k);
sum((i-a),(j-b),5)=sum((i-a),(j-b),5)+u4;
feature1(i-a,j-b,7)=sum((i-a),(j-b),5);
end
end
end
%-------------------- 记录特征点数 ------------------------
n=(x-2*a)*(y-2*b);
图像分类的MATLAB代码
5星 · 超过95%的资源 需积分: 17 43 浏览量
2018-12-30
09:05:02
上传
评论 15
收藏 1KB ZIP 举报
piaoen2
- 粉丝: 39
- 资源: 199
最新资源
- 正点原子开拓者FPGA多人表决器代码项目
- EOP-Last5Years.txt
- windows 32位、64位系统常见缺少的库
- 毕业设计基于springboot+vue实现的求职招聘类型网站源码+数据库(高分项目).zip
- 535springboot + vue 体质测试数据分析及可视化设计.zip(可运行源码+数据库文件+文档)
- python毕业设计-基于Django+OpenCV的二维码生成与识别系统源码.zip
- 基于springboot+vue实现的求职招聘类型网站源代码+数据库(优质毕设项目).zip
- iOS APP提审checklist
- 第十四届中北大学ACM程序设计竞赛.zip
- UIGF_200852355_202404242026.json
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈