PS=imresize(PS,[300,300],'bilinear');%归一化大小

PS=rgb2gray(PS);

[m,n]=size(PS);                       %测量图像尺寸参数

GP=zeros(1,256);                     %预创建存放灰度出现概率的向量

for k=0:255

GP(k+1)=length(find(PS==k))/(m*n);  %计算每级灰度出现的概率,将其存入GP中相应位置

end

%直方图均衡化

S1=zeros(1,256);

for i=1:256

for j=1:i

S1(i)=GP(j)+S1(i);              %计算Sk

end

end

S2=round((S1*256)+0.5);               %将Sk归到相近级的灰度

%图像均衡化

f=PS;

for i=0:255

f(find(PS==i))=S2(i+1);         %将各个像素归一化后的灰度值赋给这个像素

end

figure,imshow(f);

%边缘检测

f=edge(f,'canny',0.25);

imshow(f);

%二值法锐化图像

f=double(f);

[x,y]=gradient(f);

g=sqrt(x.*x+y.*y);

i=find(g>=0.5);

g(i)=256;

j=find(g<0.5);

g(j)=0;

imshow(g);

title('二值法锐化图像');

%中值滤波

g=medfilt2(g);

g=dither(g);

imshow(g);

%提取面积,矩形度,圆形度,拉伸度特征

%g=im2bw(g);

[x,y]=size(g);

BW = bwperim(g,8); % 检测边缘跟踪,用于计算周长

%检测垂直方向连读的周长像素点%

P1=0;

P2=0;

Ny=0; % 记录垂直方向连续周长像素点的个数

for i=1:x

for j=1:y

if (BW(i,j)>0)

P2=j;

if ((P2-P1)==1) % 判断是否为垂直方向连续的周长像素点

Ny=Ny+1;

end

P1=P2;

end

end

end

%检测水平方向连读的周长像素点

P1=0;

P2=0;

Nx=0; % 记录水平方向连续周长像素点的个数

for j=1:y

for i=1:x

if (BW(i,j)>0)

P2=i;

if ((P2-P1)==1) % 判断是否为水平方向连续的周长像素点

Nx=Nx+1;

end

P1=P2;

end

end

end

SN=sum(sum(BW)); % 计算周长像素点的总数

Nd=SN-Nx-Ny; % 计算奇数码的链码数目

H=max(sum(g)); % 计算目标的高度

W=max(sum(g')); % 图象g经矩阵转置后,计算宽度

L=sqrt(2)*Nd+Nx+Ny; % 计算周长

%====形态特征值计算===%

A=bwarea(g); % 计算目标的面积

R=A/(H*W); % 计算矩形度

E=min(H,W)/max(H,W); % 计算伸长度

temp1=[A,R,E];

%提取不变矩特征

[M,N]=size(g);

[x,y]=meshgrid(1:N,1:M);

x=x(:);

y=y(:);

g=g(:);

m.m00=sum(g);

if(m.m00==0)

m.m00=eps;

end

m.m10=sum(x.*g);

m.m01=sum(y.*g);

m.m11=sum(x.*y.*g);

m.m20=sum(x.^2.*g);

m.m02=sum(y.^2.*g);

m.m30=sum(x.^3.*g);

m.m03=sum(y.^3.*g);

m.m12=sum(x.*y.^2.*g);

m.m21=sum(x.^2.*y.*g);

xbar=m.m10/m.m00;

ybar=m.m01/m.m00;

e.eta11=(m.m11-ybar*m.m10)/m.m00^2;

e.eta20=(m.m20-xbar*m.m10)/m.m00^2;

e.eta02=(m.m02-ybar*m.m01)/m.m00^2;

e.eta30=(m.m30-3*xbar*m.m20+2*xbar^2*m.m10)/m.m00^2.5;

e.eta03=(m.m03-3*ybar*m.m02+2*ybar^2*m.m01)/m.m00^2.5;

e.eta21=(m.m21-2*xbar*m.m11-ybar*m.m20+2*xbar^2*m.m01)/m.m00^2.5;

e.eta12=(m.m12-2*ybar*m.m11-xbar*m.m02+2*ybar^2*m.m10)/m.m00^2.5;

phi(1)=e.eta20+e.eta02;

phi(2)=(e.eta20-e.eta02)^2+4*e.eta11^2;

phi(3)=(e.eta30-3*e.eta12)^2+(3*e.eta21-e.eta03)^2;

phi(4)=(e.eta30+e.eta12)^2+(e.eta21+e.eta03)^2;

phi(5)=(e.eta30-3*e.eta12)*(e.eta30+e.eta12)*((e.eta30+e.eta12)^2-3*(e.eta21+e.eta03)^2+(3*e.eta21-e.eta03)*          (e.eta21+e.eta03)*(3*(e.eta30+e.eta12)^2-(e.eta21+e.eta03)^2));

phi(6)=(e.eta20-e.eta02)*((e.eta30+e.eta12)^2-(e.eta21+e.eta03)^2)+4*e.eta11*(e.eta30+e.eta12)*(e.eta21+e.eta03);

phi(7)=(3*e.eta21-e.eta03)*(e.eta30+e.eta12)*((e.eta30+e.eta12)^2-3*(e.eta21+e.eta03)^2)+(3*e.eta12-e.eta30)*          (e.eta21+e.eta03)*(3*(e.eta30+e.eta12)^2-(e.eta21+e.eta03)^2);

temp2 = abs(log(phi));%包含七个特征值

temp=[temp1,temp2]

end

计算特征数据matlab代码,科学网—MATLAB特征提取代码 - 蒋样明的博文相关推荐

  1. java 调用matlab rank_科学网—Matlab: X is rank deficient - 李旭的博文

    Summary 开贴讨论Rank deficient matrix线性回归之过程.示例数据包含在附件中,x is a matrix whose columns represent random var ...

  2. 修改matlab fig,科学网—fig图片修改技巧 - 张坤的博文

    利用Matlab输图片时最好保存一份fig格式的文件,以备后续投稿时修改图片以满足期刊要求 1.打开Matlab-->打开需要的图片: 2.点击'Edit'-->'Figure prope ...

  3. 指纹特征点提取代码matlab代码,科学网—MATLAB特征提取代码 - 蒋样明的博文

    PS=imresize(PS,[300,300],'bilinear');%归一化大小 PS=rgb2gray(PS); [m,n]=size(PS);                       % ...

  4. matlab对数收益直方图,科学网—MATLAB中绘制数据直方图的新函数histogram2 - 王福昌的博文...

    MATLAB中有命令hist3() 可以绘制直方图,竖坐标是频数,这与一些教科书中用纵轴表示频率的做法不一致,有些时候不便于使用.当然,使用者可以自己编写定制能够在纵轴绘出频率的直方图.在MATLAB ...

  5. matlab中的mkdir函数_科学网—Matlab中计算函数运行时间的三种方法及判断新建文件夹 - 张伟的博文...

    (一)运行时间 1.tic和toc组合 计算daotic和toc之间那专段程序之间的属运行时间,它的经典格式为 : tic 函数 toc 复制函数代码,当代码遇到tic时Matlab自动开始计时,运行 ...

  6. matlab如何画图时去掉陆地点,科学网—Matlab m_map一张地图上使用用多个colormap以及patch精细岸线数据去除河流 - 肖鑫的博文...

    主修物理海洋学,有变量空间场的画图需求,这是遇到的一些细节问题,部分灵感来自于网络. 本人在画陆地数据加温盐场的图时,需要调用两个colormap,这有很多种解决办法: 普通的2014b以后的版本来讲 ...

  7. matlab 数据分割,科学网—MATLAB把一个包含多个站点数据的文件分割到各个站点单独的文件夹 - 张乐乐的博文...

    有65个站点的气象数据,但是这些数据全部在一个文件中,本程序主要想着把每个站点的数据放在各个单独的文件夹中.下面是我给写的程序: clear;clc %读取数据 shuju=importdata('C ...

  8. matlab做误差棒图,科学网—Matlab误差棒、图例、颜色配比,很有用的代码 - 周锋的博文...

    话不多说,直接贴代码和效果图,会用之人自然会觉得有用. 效果图: 代码: clear; clc; load('ALGO_GPS.neu');  % 加载数据 data = ALGO_GPS; dyr ...

  9. matlab的peer啥意思,科学网—Matlab读取PEER地震动记录数据库加速度数据函数 - 王德才的博文...

    PEER地震动记录数据库是目前应用最为广泛的数据库,为了便于利用其中的强震记录,对几年前采用Matlab编写的读取加速度数据函数进行了改写,使用了向量化的编写规则,减少了原有的循环处理,比原来的程序简 ...

最新文章

  1. 非本地类型不能定义方法 cannot define new methods on non-local type time.Duration
  2. 【Smart_Point】unique_ptr中独占指针使用MakeFrame
  3. 30秒无需编码完成一个REST API服务
  4. vscode自动格式化不符合eslint_VsCode(Visual Studio Code)格式化代码符合EsLint
  5. 用计算机表白的数字,用数字表白的句子大全 如何用数字表白一段话
  6. imsi序列号_IPhone 获取IMSI序列号
  7. 什么标签用于在表单中构建复选框_UI/UX笔记之如何设计好表单
  8. 亲身经历之微信支付沙箱环境扫码支付遇到的那些坑
  9. android https详解,如何使用HTTPS和HTTP来解析Android中的JSON数据?
  10. JAVA方法中的参数用final来修饰的原因
  11. matlab给图像加云,matlab怎么给图像加雾
  12. WinAPI: midiOutSetVolume - 设置 MIDI 输出设备的音量
  13. 李洪强iOS经典面试题30-一个区分度很大的面试题
  14. [礼仪大赛策划方案]图:如何打造一场精美极致的礼仪大赛?PPT动态柱状图,如何动态显示?Flash如何渲染PPT界面呢?
  15. 2022年3月14日黑马程序员第二天
  16. 证件照处理:一寸照片换底色
  17. 刻度尺组件vue-scale,并绑定输入框
  18. Critical dependency: the request of a dependency is an expression
  19. springboot实现反向代理
  20. 基于DPABI和SPM12的任务态fMRI分析笔记1——预处理

热门文章

  1. 13.5 常见Random类
  2. java exec 空格_java exec 空格及特殊符号处理的解决方案
  3. Nginx的启动、停止与重启---linux
  4. [洛谷P4726]【模板】多项式指数函数
  5. Windows Subsystem for Linux (WSL)简单尝试
  6. Cassandra 3.x官方文档(1)---关于Cassandra
  7. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
  8. JavaScript学习记录总结(四)——js函数的特殊性
  9. Scrapy入门教程
  10. UA MATH636 信息论8 线性纠错码的解码算法