提取手图像的最佳阈值

时间:2015-10-27 17:56:40

标签: image-processing

我正在通过手掌纹理和几何图形进行掌纹识别。我想在预处理步骤中对手部图像进行二值化,以提取手掌宽度和手指宽度等几何特征。  我使用高斯滤波器来降低噪声,使用Otsu方法进行阈值处理,但是我无法达到最佳图像!我想知道是否有人帮助我!

我的数据库是从“IIT Delhi Touch-less Palm print”下载的

I=imread('hand.jpg');
h= fspecial('gaussian', 15,5);
s=imfilter(I,h,'symmetric');
q=graythresh(I)
BW=im2bw(I,q);

1 个答案:

答案 0 :(得分:0)

我尝试了以下代码,并在您的Dropbox图片上获得了一些有希望的结果。您可以尝试并分享您的结果以便进一步处理。

clc
clear all
close all

impath = 'E:\GoogleDrive\Mathworks\irisDEt\HandSeg';
[name,path] = uigetfile({'*.jpg';'*.png'},'mytitle',impath);

im =imread([path,name]);
im = imresize(im,0.5);
gms = 15;

red = im(:,:,1);
redmed = medfilt2(red,[gms,gms],'symmetric');


redmedbw = im2bw(redmed,0.9*graythresh(redmed));
redmedbw = bwareaopen(redmedbw,1500);
redmedbw = imclose(redmedbw,strel('disk',5));

figure,imshow(im,[])
figure,imshow(redmed,[])
figure,imshow(redmedbw,[])

我的结果是:

enter image description here

enter image description here

enter image description here

从结构中对关键(峰和谷)的结构和提取进行特征估计的代码:

function [sig,xysamp,idx]= signature(bw,prec)
boundry = bwboundaries(bw);

xy = boundry{1};

x = xy(:,1);
y = xy(:,2);



len = length(x);
res = (len/prec);

re = rem(res,2);

if re
    res = ceil(res);
end

indexes = 1:res:len;

xnew = x(indexes);
ynew = y(indexes);

xysamp = [xnew,ynew] ;
cx = round(mean(xnew));
cy = round(mean(ynew));

xn = abs(xnew-cx);
yn = abs(ynew-cy);

% ang = atand(yn./xn);

sig = (xn.^2+yn.^2);
sig = sig/max(sig);

% Critical Points in Signatures.

diffsig = diff(sig);

% pos = zeros(length(diffsig),1);
idx = 1;
for i = 2:length(diffsig)
    if diffsig(i-1)*diffsig(i) <0
        idx = [idx,i];
    end    
end
idx = [idx,i];

此处idxxysamp的索引,它提供图像中的实际边界位置。峰值和谷值的位置可能并不准确,因为我正在对边界进行采样,这是一种非常简单的方法来处理基于结构的问题。

谢谢

临界点提取结果:

enter image description here