一 : 5.7寸屏三星GALAXY A8曝光 支持指纹识别
[摘要]该机确实采用了超窄边框设计和拥有指纹识别功能,配备5.7英寸SuperAMOLED触控屏和骁龙615处理器,预计会在近期登陆国内市场。
腾讯数码讯(水蓝)尽管并未正式发布,但大家对于三星GALAXY A8或许不会感到陌生,此前这款新机由于传闻会国内市场首发而备受关注。而现在,法国网站nowhereelse有最新放出了一组GALAXY A8的真机谍照,并证实该机确实采用了超窄边框设计和拥有指纹识别功能,配备5.7英寸SuperAMOLED触控屏和骁龙615处理器,预计会在近期登陆国内市场。
超窄边框设计
从此次曝光的三星GALAXY A8真机谍照来看,该机相比其他GALAXY A系列的直线条造型不同,而是有着相当圆润的边角轮廓,并且还引入了超窄边框设计,屏占比控制得相当不错。此外,该机的背面与当年的GALAXY SIII有些相似,并拥有5.9毫米的超薄机身和增加了金属材质边框,至于重量则为140克。
三星GALAXY A8还拥有与实体home键,并支持指纹识别功能,这也是GALAXY A系列首次加入该功能,能够提供更安全的使用体验。同时该机所配的触控屏尺寸达到了5.7英寸,支持1080p(1920×1080像素)分辨率,拥有2GB内存和16GB的存储容量,并可借助存储卡扩展获得更多的存储空间。
强化拍照功能
三星GALAXY A8还强化了拍照功能,不仅配备500万像素前置镜头,并能够录制1080p分辨率视频画面和支持最高120度的“广角自拍”功能;而且主摄像头规格也达到了1600万像素,并配有LED闪光灯。这也意味着GALAXY A8将会首次在非旗舰机型上配备1600万像素级别摄像头,并有可能使用与GALAXY S6同款的相机传感器,似乎证实了三星中端机型在摄像头规格也将会迎来全面升级的说法。
除此之外,该机还搭载有全新Android5.1.1系统和全新的TouchWiz界面,并且还去掉了二级菜单,在操作上更加简便和快捷。内置1.4GHz主频的骁龙615处理器,支持LTE 4G网络,所配的电池容量则为3050毫安时,其他诸如双卡双待,NFC近场通信功能,蓝牙4.1等功能也会是一应俱全。
或将夏季发布
值得一提的是,从此次曝光的GALAXY A8系统截图来看,该机的型号为SM-A8000,加上中文界面和菜单,所以应该是该机的国行版本,也在很大程度上证实了GALAXY A8或将在国内市场首发的传闻。不过,根据此前国外网站SamMobile披露的消息称,这款三星新机也会在亚洲其他市场以及欧洲市场推出。
目前,三星GALAXY A8国行的微博客户端已经在测试之中,但暂时还不清楚会在何时发布。不过,随着该机真机谍照的再次曝光,或许意味着在今年夏季正式登场的可能性较大。
二 : 指纹识别算法
function fpextractdemo(action, varargin)
% FPEXTRACTDEMO 指纹特征提取演示程序
% Modified by PRTsinghua@hotmail.com
%
% 输入图像必须是256×256的灰度图
% 8-bit灰度级的图像 @ 500 dpi.
% 如果这些条件不满足,一些函数中的参数必须做相应的改变
%
%
% 选项:
% - Centralize: 二值化图像,计算中心点
% - Crop: 图像修剪
% - Sectorize: 可视化扇形
% - Normalize: 归一化输入图像
% - Gabor filters: 可视化Gabor滤波器
% - Convolute: 计算输入图像和Gabor滤波器的convolution
% - Features: 特征可视化
% - FingerCode: 在数据库中加入该指纹
% - Check: 指纹匹配
%
%
% 指纹识别中一个至关重要的步骤就是中心点的确定。[www.61k.com]如果剪切指纹图像时出现了任何
% 错误,你可以使用辅助的m文件"vedicentro.m":它使得输入指纹可视化并计算指纹
% 中心,借助于m函数 "centralizing.m"。
指纹算法 指纹识别算法
%
% 在MATLAB的命令行提示中输入 "fpextractdemo" 运行程序
%--------------------------------------------------------------------------
if nargin<1,
action='InitializeFPEXTRACTDEMO';
end;
feval(action,varargin{:})
return;
%%%
%%% 子函数 - InitializeFPEXTRACTDEMO
%%%
function InitializeFPEXTRACTDEMO()
% 如果 fpextractdemo 已经在运行,将之转到前台
h = findobj(allchild(0), 'tag', 'Extracting FingerPrint Features Demo ( Modified by PRTsinghua@hotmail.com v) ');
if ~isempty(h)
figure(h(1))
return
end
screenD = get(0, 'ScreenDepth');
if screenD>8
grayres=256;
else
指纹算法 指纹识别算法
grayres=128;
end
FpextractDemoFig = figure( ...
'Name','指纹特征提取演示程序 Modified by PRTsinghua@hotmail.com', ... 'NumberTitle','off', 'HandleVisibility', 'on', ...
'tag', '指纹特征提取演示程序', ...
'Visible','off', 'Resize', 'off',...
'BusyAction','Queue','Interruptible','off', ...
'Color', [.8 .8 .8], ...
'IntegerHandle', 'off', ...
'Colormap', gray(grayres));
figpos = get(FpextractDemoFig, 'position');
figpos(3:4) = [1024 525];
% Adjust the size of the figure window
horizDecorations = 10; % 调整大小.
vertDecorations = 45; % 标题栏.
screenSize = get(0,'ScreenSize');
dx = screenSize(3) - figpos(1) - figpos(3) - horizDecorations;
dy = screenSize(4) - figpos(2) - figpos(4) - vertDecorations;
if (dx < 0)
figpos(1) = max(5,figpos(1) + dx);
end
if (dy < 0)
figpos(2) = max(5,figpos(2) + dy);
end
指纹算法 指纹识别算法
set(FpextractDemoFig, 'position', figpos);
rows = figpos(4);
cols = figpos(3);
% Colors
bgcolor = [0.45 0.45 0.45]; % 背景颜色
wdcolor = [.8 .8 .8];
fgcolor = [1 1 1];
hs = (cols-(6*175)) / 5;
vs = (rows)/8;
%==================================== % 所有菜单和按钮的参数
Std.Interruptible = 'off';
Std.BusyAction = 'queue';
% Defaults for image axes
Ax = Std;
Ax.Units = 'Pixels';
Ax.Parent = FpextractDemoFig;
Ax.ydir = 'reverse';
Ax.XLim = [.5 128.5];
Ax.YLim = [.5 128.5];
Ax.CLim = [0 1];
Ax.XTick = []; % 水平间隔 % 垂直间隔 % Window 颜色 % 文本
指纹算法 指纹识别算法
Ax.YTick = [];
Img = Std;
Img.CData = [];
Img.Xdata = [1 128];
Img.Ydata = [1 128];
Img.CDataMapping = 'Scaled'; Img.Erasemode = 'none';
Ctl = Std;
Ctl.Units = 'Pixels';
Ctl.Parent = FpextractDemoFig;
Btn = Ctl;
Btn.Style = 'pushbutton'; Btn.Enable = 'off';
Edit = Ctl;
Edit.Style = 'edit';
Edit.HorizontalAlignment = 'right'; Edit.BackgroundColor = 'white'; Edit.ForegroundColor = 'black';
Menu = Ctl;
Menu.Style = 'Popupmenu';
Text = Ctl;
Text.Style = 'text';
Text.HorizontalAlignment = 'left'; Text.BackgroundColor = bgcolor;
指纹算法 指纹识别算法
Text.ForegroundColor = fgcolor;
%================================ % 0 度
ud.hComponent1Axes = axes(Ax, ...
'Position', [0*vs/6 5*vs-vs/6 175 175]);
title('0度');
ud.hComponent1Image = image(Img, ...
'Parent', ud.hComponent1Axes);
%================================ % 原始指纹图像
ud.hOriginalAxes = axes(Ax, ...
'Position', [cols/2-128 5*vs-vs/6-81 256 256]); title('原始指纹图像');
ud.hOriginalImage = image(Img, ...
'Parent', ud.hOriginalAxes);
ud.OriginalImageIsStale = 1;
%================================ % 157.5 度
ud.hComponent8Axes = axes(Ax, ...
'Position', [cols-175 5*vs-vs/6 175 175]);
title('157.5 度组成');
ud.hComponent8Image = image(Img, ...
'Parent', ud.hComponent8Axes);
%================================= % 22.5 度
指纹算法 指纹识别算法
ud.hComponent2Axes = axes(Ax, ...
'Position', [hs vs/2 175 175]);
title('22.5 度组成');
ud.hComponent2Image = image(Img, ...
'Parent', ud.hComponent2Axes);
%================================ % 45 度
ud.hComponent3Axes = axes(Ax, ...
'Position', [2*hs+1*175 vs/2 175 175]);
title('45 度组成');
ud.hComponent3Image = image(Img, ...
'Parent', ud.hComponent3Axes);
%================================ % 67.5 度
ud.hComponent4Axes = axes(Ax, ...
'Position', [3*hs+2*175 vs/2 175 175]);
title('67.5 度组成');
ud.hComponent4Image = image(Img, ...
'Parent', ud.hComponent4Axes);
% 90 度
ud.hComponent5Axes = axes(Ax, ...
'Position', [4*hs+3*175 vs/2 175 175]);
title('90 度组成');
ud.hComponent5Image = image(Img, ...
'Parent', ud.hComponent5Axes);
指纹算法 指纹识别算法
%================================= % 112.5 度
ud.hComponent6Axes = axes(Ax, ...
'Position', [5*hs+4*175 vs/2 175 175]);
title('112.5 度组成');
ud.hComponent6Image = image(Img, ...
'Parent', ud.hComponent6Axes);
%================================= % 135 度
ud.hComponent7Axes = axes(Ax, ...
'Position', [6*hs+5*175 vs/2 175 175]);
title('135 度组成');
ud.hComponent7Image = image(Img, ...
'Parent', ud.hComponent7Axes);
%================================= % 框架
ud.hControlFrame = uicontrol(Std, ...
'Parent', FpextractDemoFig, ...
'Style', 'Frame', ...
'Units', 'pixels', ...
'Position', [vs/6 5*vs-vs/6-81 200 vs+vs/8], ...
'BackgroundColor', bgcolor);
%==================================== % 图像弹出菜单
ud.hImgPop = uicontrol(Menu, ...
指纹算法 指纹识别算法
'Position',[vs/6+vs/8 5*vs-2*vs/3+7 180 vs/16], ...
'String','Whorl|Twin loop|Left loop|Right loop|Other image', ... 'Callback','fpextractdemo(''LoadNewImage'')');
% 文字标签
uicontrol( Text, ...
'Position',[vs/6+vs/8 5*vs-vs/6-vs/3-2 180 vs/4], ... 'String','选择指纹类型:');
%==================================== % 弹出菜单
ud.hSelectStepPop = uicontrol(Menu, ...
'Position',[vs/6+vs/8 4*vs-7 120 vs/16], ...
'String','Centralize|Crop|Sectorize|Normalize|Gabor filters|Convolute|Features|FingerCode|Check', ...
'Callback','fpextractdemo(''SelectExtractingStep'')'); % 文字标签
uicontrol( Text, ...
'Position',[vs/6+vs/8 4*vs-4 90 vs/4], ...
'String','选择步骤:');
%==================================== % Info 和 Close 的框架
ud.hInfoCloseFrame = uicontrol(Std, ...
'Parent', FpextractDemoFig, ...
'Style', 'Frame', ...
'Units', 'pixels', ...
'Position', [3*hs+2*175 2 vs/2+2*175 vs/2-4], ...
'BackgroundColor', bgcolor);
指纹算法 指纹识别算法
%==================================== % 按钮 - Info 和 Close
ud.hInfo=uicontrol(Btn, ...
'Position',[3*hs+2*175+vs/2 7 vs/8+135-vs/2 vs/4], ... 'String','帮助', ...
'Callback','helpwin fpextractdemo');
ud.hClose=uicontrol(Btn, ...
'Position',[4*hs+3*175+vs/2 7 vs/8+135-vs/2 vs/4], ... 'String','关闭', ...
'Callback','close(gcbf)');
%==================================== % 状态栏
ud.hStatus = uicontrol(Std, ...
'Parent', FpextractDemoFig, ...
'Style','text', ...
'Units','pixels', ...
'Position',[hs vs/8 2*175-vs/8 vs/4], ...
'Foreground', [.8 0 0], ...
'Background',wdcolor, ...
'Horiz','center', ...
'Tag', 'Status', ...
'String','初始化程序...');
set(FpextractDemoFig, 'UserData', ud);
set(FpextractDemoFig, 'visible','on','HandleVisibility','callback'); set([ud.hInfo ud.hClose], 'Enable', 'on');
指纹算法 指纹识别算法
LoadNewImage(FpextractDemoFig);
SelectExtractingStep(FpextractDemoFig);
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%
%%% 子函数 - LoadNewImage
%%%
function LoadNewImage(DemoFig)
% 加载新图像
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
ud=get(DemoFig,'Userdata');
v = get(ud.hImgPop,{'value','String'});
name = deblank(v{2}(v{1},:));
drawnow
switch name
case 'Right loop',
namefile='37_7.bmp';
[img,map]=imread(namefile);
case 'Whorl',
指纹算法 指纹识别算法
namefile='19_7.bmp';
[img,map]=imread(namefile);
case 'Left loop',
namefile='37_3.bmp';
[img,map]=imread(namefile);
case 'Twin loop',
namefile='37_5_2.bmp';
[img,map]=imread(namefile);
case 'Other image',
[namefile,pathname]=uigetfile('*.bmp','请选择一个256×256的灰度位图'); if namefile~=0
[img,map]=imread(strcat(pathname,namefile));
else
disp(' Chose a file! ');
[img,map]=imread('37_7.bmp');
end
otherwise
error('fpextractdemo: Unknown Image Option!');
end
% 如果图像大小 N x M 且 mod(N,8)~=0 或者 mod(M,8)~=0
% 则改变图像大小
imgN=size(img,1);
imgM=size(img,2);
modN=mod(imgN,8);
modM=mod(imgM,8);
%----------------------------------------
% 将信息保存在 informations.dat
if isa(img,'uint8')
指纹算法 指纹识别算法
graylevmax=2^8-1;
end
if isa(img,'uint16')
graylevmax=2^16-1;
end
if isa(img,'uint32')
graylevmax=2^32-1;
end
save('informations.dat','graylevmax','img');
%-----------------------------------------
% 改变图像大小
%-----------------------------------------
img=img(modN+1:imgN,modM+1:imgM);
%-----------------------------------------
img = double(img)/graylevmax;
set(get(ud.hOriginalAxes, 'title'), 'string', '原始指纹图像'); set(get(ud.hComponent1Axes, 'title'), 'string', '0 度组成'); set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 度组成'); set(ud.hOriginalImage, 'Cdata', img);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Please select a step to process...');
return;
%======================================== %%%
%%% 子函数 - SelectExtractingStep
%%%
function SelectExtractingStep(DemoFig)
指纹算法 指纹识别算法
% Load a step
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
ud=get(DemoFig,'Userdata');
v = get(ud.hSelectStepPop,{'value','String'}); name = deblank(v{2}(v{1},:));
drawnow
switch name
case 'Centralize',
Centralize(DemoFig);
case 'Crop',
Crop(DemoFig);
case 'Sectorize',
Sectorize(DemoFig);
case 'Normalize',
Normalize(DemoFig);
case 'Gabor filters',
Gaborfilter(DemoFig);
case 'Convolute',
Convolute(DemoFig);
case 'Features',
Features(DemoFig);
case 'FingerCode',
Fingercode(DemoFig);
case 'Check',
指纹算法 指纹识别算法
Check(DemoFig);
otherwise
error('fpextractdemo: Unknown Image Option!');
end
return;
%==========================================================================
%%%
%%% 子函数 - Centralize
%%%
function Centralize(DemoFig)
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在计算中心,请等待......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
[BinarizedPrint,XofCenter,YofCenter] = centralizing(fingerprint,0);
set(get(ud.hComponent8Axes, 'title'), 'string', '二值化图像');
set(ud.hComponent8Image, 'Cdata', BinarizedPrint);
指纹算法 指纹识别算法
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished centralization');
ud.OriginalImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函数 - Crop
%%%
function Crop(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在剪切,请等待......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
CroppedPrint = double(CroppedPrint)/graylevmax;
set(get(ud.hComponent1Axes, 'title'), 'string', 'Cropped Print');
指纹算法 指纹识别算法
set(ud.hComponent1Image, 'Cdata', CroppedPrint);
set(get(ud.hComponent8Axes, 'title'), 'string', 'Binarized Print');
set(ud.hComponent8Image, 'Cdata', BinarizedPrint);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished Crop');
ud.Component1ImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函数 - Sectorize
%%%
function Sectorize(DemoFig)
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在扇形化,请等待......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
指纹算法 指纹识别算法
for ( i=1:1:175*175)
tmp=CroppedPrint(i);
CroppedPrint(i)=whichsector(i);
if (CroppedPrint(i)==36 | CroppedPrint(i)==37)
CroppedPrint(i)=tmp/graylevmax;
else
CroppedPrint(i)=CroppedPrint(i)/64;
end
end
set(get(ud.hComponent1Axes, 'title'), 'string', 'SectorizedPrint');
set(ud.hComponent1Image, 'Cdata', CroppedPrint);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished Sectorization');
ud.Component1ImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函数 - Normalize
%%%
function Normalize(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
指纹算法 指纹识别算法
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在归一化,请等待......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector] = sector_norm( CroppedPrint , 0 , 0);
CroppedPrint = double(CroppedPrint)/graylevmax;
NormalizedPrint = double(NormalizedPrint)/100;
set(get(ud.hComponent1Axes, 'title'), 'string', 'Cropped Print');
set(ud.hComponent1Image, 'Cdata', CroppedPrint);
set(get(ud.hComponent8Axes, 'title'), 'string', 'Normalized Print');
set(ud.hComponent8Image, 'Cdata', NormalizedPrint);
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Finished normalization');
ud.Component1ImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函数 - Gaborfilter
指纹算法 指纹识别算法
%%%
function Gaborfilter(DemoFig)
%
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在Gabor滤波,请等待......');
ud=get(DemoFig,'Userdata');
num_disk=8;
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
gabor=gabor*128;
switch angle<num_disk
case (angle==0),
set(get(ud.hComponent1Axes, 'title'), 'string', '0 度 gabor'); set(ud.hComponent1Image, 'Cdata', gabor);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 度 gabor'); set(ud.hComponent2Image, 'Cdata', gabor);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 度 gabor'); set(ud.hComponent3Image, 'Cdata', gabor);
case (angle==3),
指纹算法 指纹识别算法
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 度 gabor');
set(ud.hComponent4Image, 'Cdata', gabor);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 度 gabor');
set(ud.hComponent5Image, 'Cdata', gabor);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 度 gabor');
set(ud.hComponent6Image, 'Cdata', gabor);
case (angle==6),
set(get(ud.hComponent7Axes, 'title'), 'string', '135 度 gabor');
set(ud.hComponent7Image, 'Cdata', gabor);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 度 gabor');
set(ud.hComponent8Image, 'Cdata', gabor);
otherwise
error('Nothing !');
end
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Gabor Filters were shown');
ud.OriginalImageIsStale = 0;
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
指纹算法 指纹识别算法
%%% 子函数 - Convolute
%%%
function Convolute(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在处理8个Gabor滤波器,旋转......'); ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
load 'informations.dat' -mat
fingerprint = fingerprint*graylevmax;
N=175;
num_disk=8;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1); for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
指纹算法 指纹识别算法
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
px=((z2x-1)+mod((z2x-1),2))/2;
py=((z2y-1)+mod((z2y-1),2))/2;
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
img = double(ComponentPrint)/graylevmax;
switch angle<8
case (angle==0),
set(get(ud.hComponent1Axes, 'title'), 'string', '0 度组成');
set(ud.hComponent1Image, 'Cdata', img);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 度组成'); set(ud.hComponent2Image, 'Cdata', img);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 度组成'); set(ud.hComponent3Image, 'Cdata', img);
case (angle==3),
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 度组成'); set(ud.hComponent4Image, 'Cdata', img);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 度组成');
指纹算法 指纹识别算法
set(ud.hComponent5Image, 'Cdata', img);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 度组成');
set(ud.hComponent6Image, 'Cdata', img);
case (angle==6),
set(get(ud.hComponent7Axes, 'title'), 'string', '135 度组成');
set(ud.hComponent7Image, 'Cdata', img);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 度组成');
set(ud.hComponent8Image, 'Cdata', img);
otherwise
error('Nothing !');
end
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'旋转结束');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%%%
%%% 子函数 - Features
%%%
function Features(DemoFig)
%
指纹算法 指纹识别算法
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在处理8个Gabor滤波器,旋转......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
N=175;
num_disk=8;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1);
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
指纹算法 指纹识别算法
px=((z2x-1)+mod((z2x-1),2))/2;
py=((z2y-1)+mod((z2y-1),2))/2;
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
img = double(ComponentPrint)/graylevmax;
img1 = double(disk)/51200;
switch angle<8
case (angle==0),
set(get(ud.hComponent1Axes, 'title'), 'string', '0 度特征'); set(ud.hComponent1Image, 'Cdata', img1);
case (angle==1),
set(get(ud.hComponent2Axes, 'title'), 'string', '22.5 度特征'); set(ud.hComponent2Image, 'Cdata', img1);
case (angle==2),
set(get(ud.hComponent3Axes, 'title'), 'string', '45 度特征'); set(ud.hComponent3Image, 'Cdata', img1);
case (angle==3),
set(get(ud.hComponent4Axes, 'title'), 'string', '67.5 度特征'); set(ud.hComponent4Image, 'Cdata', img1);
case (angle==4),
set(get(ud.hComponent5Axes, 'title'), 'string', '90 度特征'); set(ud.hComponent5Image, 'Cdata', img1);
case (angle==5),
set(get(ud.hComponent6Axes, 'title'), 'string', '112.5 度特征'); set(ud.hComponent6Image, 'Cdata', img1);
case (angle==6),
指纹算法 指纹识别算法
set(get(ud.hComponent7Axes, 'title'), 'string', '135 度特征');
set(ud.hComponent7Image, 'Cdata', img1);
case (angle==7),
set(get(ud.hComponent8Axes, 'title'), 'string', '157.5 度特征');
set(ud.hComponent8Image, 'Cdata', img1);
otherwise
error('Nothing !');
end
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'Features were extracted');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
%==========================================================================
%%%
%%% 子函数 - FingerCode
%%%
function Fingercode(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
指纹算法 指纹识别算法
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在指纹编码......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
N=175;
num_disk=8;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1);
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
px=((z2x-1)+mod((z2x-1),2))/2;
py=((z2y-1)+mod((z2y-1),2))/2;
指纹算法 指纹识别算法
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
%img = double(ComponentPrint)/graylevmax;
%img1 = double(disk)/51200;
finger_code1{angle+1}=vector(1:36);
end
load('informations.dat','img','-mat');
img=imrotate(img,22.5/2);
imgN=size(img,1);
imgM=size(img,2);
modN=mod(imgN,8);
modM=mod(imgM,8);
fingerprint=double(img(modN+1:imgN,modM+1:imgM));
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1);
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
px=((z2x-1)+mod((z2x-1),2))/2;
指纹算法 指纹识别算法
py=((z2y-1)+mod((z2y-1),2))/2;
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
%img = double(ComponentPrint)/graylevmax;
%img1 = double(disk)/51200;
finger_code2{angle+1}=vector(1:36);
end
% FingerCode added to database
if (exist('fp_database.dat')==2)
load('fp_database.dat','-mat');
fp_number=fp_number+1;
data{fp_number,1}=finger_code1;
data{fp_number,2}=finger_code2;
save('fp_database.dat','data','fp_number','-append');
else
fp_number=1;
data{fp_number,1}=finger_code1;
data{fp_number,2}=finger_code2;
save('fp_database.dat','data','fp_number');
end
message=strcat('指纹编码已经成功加入数据库. 指纹编号:',num2str(fp_number)); msgbox(message,'指纹数据库','帮助');
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'指纹编码计算完成');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
指纹算法 指纹识别算法
%==========================================================================
%%%
%%% 子函数 - Check
%%%
function Check(DemoFig)
%
load 'informations.dat' -mat
if nargin<1
DemoFig = gcbf;
end
set(DemoFig,'Pointer','watch');
setstatus(DemoFig,'正在搜索数据库......');
ud=get(DemoFig,'Userdata');
fingerprint = getimage(ud.hOriginalImage);
fingerprint = fingerprint*graylevmax;
N=175;
num_disk=8;
[BinarizedPrint,XofCenter,YofCenter]=centralizing(fingerprint,0);
[CroppedPrint]=cropping(XofCenter,YofCenter,fingerprint);
[NormalizedPrint,vector]=sector_norm(CroppedPrint,0,1);
指纹算法 指纹识别算法
for (angle=0:1:num_disk-1)
gabor=gabor2d_sub(angle,num_disk);
z2=gabor;
z1=NormalizedPrint;
z1x=size(z1,1);
z1y=size(z1,2);
z2x=size(z2,1);
z2y=size(z2,2);
ComponentPrint=real(ifft2(fft2(z1,z1x+z2x-1,z1y+z2y-1).*fft2(z2,z1x+z2x-1,z1y+z2y-1)));
px=((z2x-1)+mod((z2x-1),2))/2;
py=((z2y-1)+mod((z2y-1),2))/2;
ComponentPrint=ComponentPrint(px+1:px+z1x,py+1:py+z1y);
[disk,vector]=sector_norm(ComponentPrint,1,0);
%img = double(ComponentPrint)/graylevmax;
%img1 = double(disk)/51200;
finger_code{angle+1}=vector(1:36);
end
% 输入指纹的编码已经计算,检查数据库
if (exist('fp_database.dat')==2)
load('fp_database.dat','-mat');
%---- 申请内存 -----------------------------------
ruoto1=zeros(36,1);
ruoto2=zeros(36,1);
vettore_d1=zeros(12,1);
vettore_d2=zeros(12,1);
best_matching=zeros(fp_number,1);
指纹算法 指纹识别算法
% 开始检查 ---------------------------------------
for scanning=1:fp_number
fcode1=data{scanning,1};
fcode2=data{scanning,2};
for rotazione=0:1:11
d1=0;
d2=0;
for disco=1:8
f1=fcode1{disco};
f2=fcode2{disco};
% ora ruoto f1 ed f2 della rotazione ciclica ---------- for old_pos=1:12
new_pos=mod(old_pos+rotazione,12);
if (new_pos==0)
new_pos=12;
end
ruoto1(new_pos)=f1(old_pos);
ruoto1(new_pos+12)=f1(old_pos+12);
ruoto1(new_pos+24)=f1(old_pos+24);
ruoto2(new_pos)=f2(old_pos);
ruoto2(new_pos+12)=f2(old_pos+12);
ruoto2(new_pos+24)=f2(old_pos+24);
end
%------------------------------------------------------- d1=d1+norm(finger_code{disco}-ruoto1);
d2=d2+norm(finger_code{disco}-ruoto2); end
vettore_d1(rotazione+1)=d1;
vettore_d2(rotazione+1)=d2;
end
指纹算法 指纹识别算法
[min_d1,pos_min_d1]=min(vettore_d1);
[min_d2,pos_min_d2]=min(vettore_d2);
if min_d1<min_d2
minimo=min_d1;
else
minimo=min_d2;
end
best_matching(scanning)=minimo;
end
[distanza_minima,posizione_minimo]=min(best_matching);
beep;
message=strcat('数据库中与输入指纹最匹配的是:',num2str(posizione_minimo),... ' 其距离为: ',num2str(distanza_minima));
msgbox(message,'数据库信息','帮助');
%-------------------------------------------------------
else
message='数据库为空,无法检查';
msgbox(message,'指纹编码数据库错误','警告');
end
set(DemoFig,'Pointer','arrow');
setstatus(DemoFig,'数据库搜索完毕');
set(DemoFig, 'UserData', ud);
drawnow
%==========================================================================
指纹算法 指纹识别算法
指纹文件夹
指纹算法 指纹识别算法
指纹库
运行界面: 步骤:
1.选择指纹
指纹算法 指纹识别算法
2.进行预处理过程选项:
- Centralize: 二值化图像,计算中心点
- Crop: 图像修剪
- Sectorize: 可视化扇形
- Normalize: 归一化输入图像
- Gabor filters: 可视化Gabor滤波器
- Convolute: 计算输入图像和Gabor滤波器的convolution - Features: 特征可视化
- FingerCode: 在数据库中加入该指纹
- Check: 指纹匹配选择指纹
指纹算法 指纹识别算法
指纹算法 指纹识别算法
指纹算法 指纹识别算法
指纹算法 指纹识别算法
三 : 酷派大神F3首爆:支持指纹识别
此前,酷派大神官方放出预告,7月13号将召开新品发布会,极有可能发布新机大神F3。
虽然大神此次还很低调,并没有泄露很多,但是工信部已经放出了入网照片以及参数信息,一起来看看。
大神F3代号8676-A01,采用5.5寸720P显示屏,塑料机身,搭载最高主频为1.3GHz的MT6753八核处理器。内存为2G RAM+16G ROM,500万+1300万像素镜头组合,提供3000mAh电池,可选颜色只有黑色和白色两种,支持双卡双待。
此外,从背部照片可以看到,摄像头下方多出了一个新的模块,非常可能是指纹识别。这样,又将是一款定价千元的指纹识别手机。
不知道细心的用户有没有留意到,这个背部布局和设计还和周鸿祎刚刚自曝的奇酷手机十分相像,不同的是后者的电源键和音量键在同侧、三段式设计、材质也是金属。
但考虑到现在大神已经是奇虎360的子品牌,这样的巧合也就不足为奇了,F3就乖乖做奇酷小弟吧。
由此看来,指纹识别已经开始成为了国产手机的兵家必争了,大家期待吗?
四 : 小米指纹识别专利曝光!瞬间上了一个档次
小米推出带有指纹识别功能的手机只是时间问题而已,不信你往下看。
今天,我们在国家知识产权局网站上发现了一个名为“触摸按键和指纹识别实现方法、装置及终端设备”的专利,申请号为2015100507538,申请公布号为CN104537365A,申请人显示是“小米科技有限责任公司”。
毫无疑问,这就是小米的指纹识别设计方案,而且还申请了专利。
从专利描述来看,该专利的主要作用是“用以将指纹识别和触摸按键集成一体化,提高整机的外观美感、增强盖板玻璃的结构强度、便于用户操作。”
简单描述如下:
该装置包括指纹识别传感器和光学传感器,设置于终端设备的盖板玻璃的下方;指纹识别电路,与指纹识别传感器连接,用于对指纹识别传感器采集到的指纹信息进行分析处理,获得指纹分析结果;主机处理器,与光学传感器和指纹识别电路连接,用于根据光学传感器监测到的光线信息判定盖板玻璃是否接收到触摸按键操作;根据指纹识别电路获得的指纹分析结果进行身份认证。
看起来小米同样是将指纹识别功能集成在了按键上,而且按键上还覆盖有一层玻璃,和iPhone的原理比较相似。
那么,问题来说,小米5会有指纹识别功能吗?
五 : 指纹识别普及或空前高涨 大神Note3即将登场
大神Note3这款产品可以说是目前手机圈子里的最大热点之一,该机不仅是大神旗下最新的高性能手机之一,而且还搭载了很多令人惊喜的功能。指纹识别功能就是大神Note3的亮点功能之一,号称能够提供业界优秀水平的指纹解锁体验。特别是在现在指纹识别功能大行其道的情况下,大神Note3这款尚未发布的产品确实有很多看头。
前不久魅族发布了全新旗舰MX5,该机将指纹识别设计在了机身前面板的Home键上,大神手机调侃魅族称,魅族MX5的设计“有刻意模仿苹果的嫌疑”,指纹识别设计在前面是不惜牺牲消费者的用户体验。在这个问题上,大神Note3的处理方法就是将指纹识别模块放置于机身背部,在使用者拿起手机时,食指就会自然的落在识别模块上,做到不影响单手操作的解锁方式。这样一来就大大提升了使用体验,让指纹识别与使用者紧紧联系在一起。
然而大神Note3的指纹识别系统不仅仅是“好用”那么简单。据介绍,大神Note3的指纹识别精度与速度都要超越华为Mate7,并且还能做到更低的成本与更低的销售价格,这可能会改写国内目前指纹手机的市场格局。放眼当下的国内市场,旗舰级的指纹识别手机无疑就是以苹果iPhone6系列、三星GALAXY S系列/Note系列为首的高价位产品,中端市场则是以华为Mate7、OPPO N3等国内知名厂商为代表,而高性价比行列目前则是魅族MX5、荣耀7等等为代表,但是高性价比行列产品的价格也处于2000元左右,距离“亲民价格”显然还有一段距离。
有消息称大神Note3手机的价格极有可能做到千元左右,这就说明国产品牌的指纹识别手机价位将会被拉低到新的位置,性价比将会大大攀升,这对于魅族与荣耀来说显然是非常巨大的压力。而头号互联网品牌小米直到现在还没有指纹识别手机的消息,显然大神Note3的出现也会影响到小米未来指纹识别产品的定价策略。
很显然,大神Note3将会是一个强势的搅局者,将会从定价、定位等多个角度影响竞争对手的产品策略,并在一定程度上对行业的发展造成积极影响。但是我们还是要注意到,大神Note3的低价策略并不是单纯的价格战,而是尽可能的将利润回馈给消费者,让更多人能够体验指纹识别的安全与便利,这对于指纹识别的快速普及是大有裨益的。
61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1