包含利用matlab实现指纹特征提取代码的词条
admin 发布:2022-12-19 22:33 120
今天给各位分享利用matlab实现指纹特征提取代码的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
如何利用matlab实现特征提取
Ox=sum(x)/2;
Oy=sum(y)/2; %求E1,E2的中心O(Ox,Oy)
I1=imcrop(OriImg,[Ox-0.9*d Oy-0.5*d 1.8*d 2*d]); %切割人脸
str=strcat('H:\CMU表情库\cohn-kanade\cohn-kanade\cohn-kanade\S010\001\Standard\',int2str(i),'.bmp');
eval('imwrite(I1,str);'); %执行字符串 每次循环读入img %读入图像 %保存归一化后的人脸图像
close all;
end
如何用matlab实现指纹图像特征的提取
其实学数字图像处理,关键的不是源代码(和一般编程还是有区别的,这个是经验之谈,其实一般博导未必会编程,但是你和他说说你的方法,他一般都能切中要害),而是你能理解基于概念及适用场所。
基于颜色、纹理、形状都属于低层特征,这些你理解就够了,关键是对你的课题适合哪种方法来映射到高层语义上面,例如:识别物体轮廓,那可能形状就比较适合等。
我之所以写上面那段话,主要是我感觉你索取代码也不说明具体要求,也就是方向不明确。
如今颜色特征提取算法有很多,诸如颜色直方图、颜色矩、颜色集、颜色聚合向量、颜色相关图等,既然你没说,我就给个IEEE CSVT 2001的一篇关于颜色直方图法的论文(源码版权归作者所有):
function colorhist = colorhist(rgb)
% CBIR_colorhist() --- color histogram calculation
% input: MxNx3 image data, in RGB
% output: 1x256 colorhistogram == (HxSxV = 16x4x4)
% as the MPEG-7 generic color histogram descriptor
% [Ref] Manjunath, B.S.; Ohm, J.-R.; Vasudevan, V.V.; Yamada, A., "Color and texture descriptors"
% IEEE Trans. CSVT, Volume: 11 Issue: 6 , Page(s): 703 -715, June 2001 (section III.B)
% check input
if size(rgb,3)~=3
error('3 components is needed for histogram');
end
% globals
H_BITS = 4; S_BITS = 2; V_BITS = 2;
%rgb2hsv可用rgb2hsi代替,见你以前的提问。
hsv = uint8(255*rgb2hsv(rgb));
imgsize = size(hsv);
% get rid of irrelevant boundaries
i0=round(0.05*imgsize(1)); i1=round(0.95*imgsize(1));
j0=round(0.05*imgsize(2)); j1=round(0.95*imgsize(2));
hsv = hsv(i0:i1, j0:j1, :);
% histogram
for i = 1 : 2^H_BITS
for j = 1 : 2^S_BITS
for k = 1 : 2^V_BITS
colorhist(i,j,k) = sum(sum( ...
bitshift(hsv(:,:,1),-(8-H_BITS))==i-1 ...
bitshift(hsv(:,:,2),-(8-S_BITS))==j-1 ...
bitshift(hsv(:,:,3),-(8-V_BITS))==k-1 ));
end
end
end
colorhist = reshape(colorhist, 1, 2^(H_BITS+S_BITS+V_BITS));
% normalize
colorhist = colorhist/sum(colorhist);
%基于纹理特征提取灰度共生矩阵用于纹理判断
% Calculates cooccurrence matrix
% for a given direction and distance
%
% out = cooccurrence (input, dir, dist, symmetric);
%
% INPUT:
% input: input matrix of any size
%
% dir: direction of evaluation
% "dir" value Angle
% 0 0
% 1 -45
% 2 -90
% 3 -135
% 4 -180
% 5 +135
% 6 +90
% 7 +45
%
% dist: distance between pixels
%
% symmetric: 1 for symmetric version
% 0 for non-symmetric version
%
% eg: out = cooccurrence (input, 0, 1, 1);
% Author: Baran Aydogan (15.07.2006)
% RGI, Tampere University of Technology
% baran.aydogan@tut.fi
function out = cooccurrence (input, dir, dist, symmetric);
input = round(input);
[r c] = size(input);
min_intensity = min(min(input));
max_intensity = max(max(input));
out = zeros(max_intensity-min_intensity+1);
if (dir == 0)
dir_x = 0; dir_y = 1;
end
if (dir == 1)
dir_x = 1; dir_y = 1;
end
if (dir == 2)
dir_x = 1; dir_y = 0;
end
if (dir == 3)
dir_x = 1; dir_y = -1;
end
if (dir == 4)
dir_x = 0; dir_y = -1;
end
if (dir == 5)
dir_x = -1; dir_y = -1;
end
if (dir == 6)
dir_x = -1; dir_y = 0;
end
if (dir == 7)
dir_x = -1; dir_y = 1;
end
dir_x = dir_x*dist;
dir_y = dir_y*dist;
out_ind_x = 0;
out_ind_y = 0;
for intensity1 = min_intensity:max_intensity
out_ind_x = out_ind_x + 1;
out_ind_y = 0;
[ind_x1 ind_y1] = find (input == intensity1);
ind_x1 = ind_x1 + dir_x;
ind_y1 = ind_y1 + dir_y;
for intensity2 = min_intensity:max_intensity
out_ind_y = out_ind_y + 1;
[ind_x2 ind_y2] = find (input == intensity2);
count = 0;
for i = 1:size(ind_x1,1)
for j = 1:size(ind_x2,1)
if ( (ind_x1(i) == ind_x2(j)) (ind_y1(i) == ind_y2(j)) )
count = count + 1;
end
end
end
out(out_ind_x, out_ind_y) = count;
end
end
if (symmetric)
if (dir 4)
dir = dir + 4;
else
dir = mod(dir,4);
end
out = out + cooccurrence (input, dir, dist, 0);
end
求基于matlab指纹扫描图像处理的源代码
clear all,close all,clc % 清理工作空间,关闭运行窗口,清理命令窗口
I=imread('Empreinte.bmp'); % 读入图像
imshow(I) % 显示图像
set(gcf,'position',[1 1 600 600]); % 得到图形窗口句柄,设置图形窗口位置
J=I(:,:,1)160; % 设定阈值为160,进行黑白化处理
imshow(J) % 显示处理后的图像
set(gcf,'position',[1 1 600 600]); % 得到图形窗口句柄,设置图形窗口位置
K=bwmorph(~J,'thin','inf'); % 数学形态学运算,图像细化,~符号代表黑白反色
imshow(~K) % 显示处理后的图像,~符号代表黑白反色
set(gcf,'position',[1 1 600 600]); % 得到图形窗口句柄,设置图形窗口位置
function y=minutie(x)
i=ceil(size(x)/2);
if x(i,i)==0;
y=0;
else
y=sum(x(:)) - 1;
end
fun=@minutie; % 得到函数句柄
L = nlfilter(K,[3 3],fun); % 滤波处理
LTerm=(L==1); % 选择端点
imshow(LTerm) % 显示白色点
LTermLab=bwlabel(LTerm); % 端点标识
propTerm=regionprops(LTermLab,'Centroid'); % 端点区域分析,寻找端点区域中心
CentroidTerm=round(cat(1,propTerm(:).Centroid)); % 端点圆整为整数
imshow(~K) % 显示隆线细化图像
set(gcf,'position',[1 1 600 600]); % 得到当前图形窗口句柄,设置位置
hold on % 在前面的图形窗口继续绘制图像
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 绘制隆线端点标识,红色圆圈
LBif=(L==3); % 选择分叉点
LBifLab=bwlabel(LBif); % 分叉点标识
propBif=regionprops(LBifLab,'Centroid','Image'); % 区域分析,寻找区域中心
CentroidBif=round(cat(1,propBif(:).Centroid)); % 分叉点圆整为整数
plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 绘制隆线分叉点标识,绿色圆圈
D=6;
Distance=DistEuclidian(CentroidBif,CentroidTerm); % 求端点和分叉点的距离
SpuriousMinutae=DistanceD; % 满足距离小于D的点
[i,j]=find(SpuriousMinutae); % 查找对应像素点
CentroidBif(i,:)=[]; % 去除该分叉点
CentroidTerm(j,:)=[]; % 去除该端点
Distance=DistEuclidian(CentroidBif); % 求两个分叉点的距离
SpuriousMinutae=DistanceD; % 满足距离小于D的点
[i,j]=find(SpuriousMinutae); % 查找对应像素点
CentroidBif(i,:)=[]; % 去除该分叉点
Distance=DistEuclidian(CentroidTerm); % 求两个端点的距离
SpuriousMinutae=DistanceD; % 满足距离小于D的点
[i,j]=find(SpuriousMinutae); % 查找对应像素点
CentroidTerm(i,:)=[]; % 去除该端点
hold off % 结束在前面的图形窗口绘图
imshow(~K) % 显示细化图
hold on % 继续在前面的图形窗口绘图
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 绘制隆线端点标识,红色圆圈
plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 绘制隆线分叉点标识,绿色圆圈
hold off % 结束在前面的图形窗口绘图
Kopen=imclose(K,strel('square',7)); % 闭合运算
KopenClean= imfill(Kopen,'holes'); % 填充图像中的孔洞
KopenClean=bwareaopen(KopenClean,5); % 开运算
imshow(KopenClean) % 显示处理结果
KopenClean([1 end],:)=0; % 赋值语句
KopenClean(:,[1 end])=0; % 赋值语句
ROI=imerode(KopenClean,strel('disk',10)); % 腐蚀运算
imshow(ROI) % 显示处理结果
imshow(I) % 显示原始图像
hold on % 继续在前面的图形窗口绘图
imshow(ROI) % 显示感兴趣区域
alpha(0.5) % 设置透明度
hold on % 继续在前面的图形窗口绘图
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 绘制端点标识,红色圆圈
plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 绘制分叉点标识,绿色圆圈
hold off % 结束在前面的图形窗口绘图
[m,n]=size(I(:,:,1)); % 求图像尺寸
indTerm=sub2ind([m,n]; % 从下标得到单精度索引
CentroidTerm(:,1),CentroidTerm(:,2)); % 端点
Z=zeros(m,n); % 全零矩阵
Z(indTerm)=1;
ZTerm=Z.*ROI';
[CentroidTermX,CentroidTermY]=find(ZTerm);
indBif=sub2ind([m,n],CentroidBif(:,1),CentroidBif(:,2)); % 从下标得到单精度索引
Z=zeros(m,n);
Z(indBif)=1;
ZBif=Z.*ROI';
[CentroidBifX,CentroidBifY]=find(ZBif);
imshow(I) % 显示原始图像
hold on % 继续绘图
plot(CentroidTermX,CentroidTermY,'ro','linewidth',2) % 红色圆圈
plot(CentroidBifX,CentroidBifY,'go','linewidth',2) % 绿色圆圈
Table=[3*pi/4 2*pi/3 pi/2 pi/3 pi/4 % 角度查找表
5*pi/6 0 0 0 pi/6
pi 0 0 0 0
-5*pi/6 0 0 0 -pi/6
-3*pi/4 -2*pi/3 -pi/2 -pi/3 -pi/4];
for ind=1:length(CentroidTermX)
Klocal=K(CentroidTermY(ind)-2:CentroidTermY(ind)+2, ...
CentroidTermX(ind)-2:CentroidTermX(ind)+2);
Klocal(2:end-1,2:end-1)=0;
[i,j]=find(Klocal);
OrientationTerm(ind,1)=Table(i,j);
end
dxTerm=sin(OrientationTerm)*5;
dyTerm=cos(OrientationTerm)*5;
figure % 新建窗口
imshow(K) % 显示黑白图
set(gcf,'position',[1 1 600 600]); % 设置图像窗口属性
hold on % 继续绘图
plot(CentroidTermX,CentroidTermY,'ro','linewidth',2) % 红色圆圈
plot([CentroidTermX CentroidTermX+dyTerm]',... % 红色短线
[CentroidTermY CentroidTermY-dxTerm]','r','linewidth',2)
for ind=1:length(CentroidBifX)
Klocal=K(CentroidBifY(ind)-2:CentroidBifY(ind)+2, ...
CentroidBifX(ind)-2:CentroidBifX(ind)+2);
Klocal(2:end-1,2:end-1)=0;
[i,j]=find(Klocal);
if length(i)~=3
CentroidBifY(ind)=NaN;
CentroidBifX(ind)=NaN;
OrientationBif(ind)=NaN;
else
for k=1:3
OrientationBif(ind,k)=Table(i(k),j(k));
dxBif(ind,k)=sin(OrientationBif(ind,k))*5;
dyBif(ind,k)=cos(OrientationBif(ind,k))*5;
end
end
end
plot(CentroidBifX,CentroidBifY,'go','linewidth',2) % 绿色圆圈
OrientationLinesX=[CentroidBifX ...
CentroidBifX+dyBif(:,1);CentroidBifX ...
CentroidBifX+dyBif(:,2);CentroidBifX CentroidBifX+dyBif(:,3)]';
OrientationLinesY=[CentroidBifY
CentroidBifY-dxBif(:,1);CentroidBifY ...
CentroidBifY-dxBif(:,2);CentroidBifY CentroidBifY-dxBif(:,3)]';
plot(OrientationLinesX,OrientationLinesY,'g','linewidth',2) % 绿色短线
MinutiaTerm=[CentroidTermX,CentroidTermY,OrientationTerm];
MinutiaBif=[CentroidBifX,CentroidBifY,OrientationBif];
saveMinutia('John Doe',MinutiaTerm,MinutiaBif); % saveMinutia函数见附件程序
关于利用matlab实现指纹特征提取代码和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
- 上一篇:索垃卡源代码多少钱(源代码索拉卡价格)
- 下一篇:论坛的后台代码(论坛网站代码)
相关推荐
- 05-14网站怎么设计,网站怎么设计怎么实现的
- 05-13包含不要手贱搜这15个关键词的词条
- 05-09网页代码,网页代码快捷键
- 05-07包含seo牛人的词条
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接