我正在通过手掌纹理和几何图形进行掌纹识别。我想在预处理步骤中对手部图像进行二值化,以提取手掌宽度和手指宽度等几何特征。 我使用高斯滤波器来降低噪声,使用Otsu方法进行阈值处理,但是我无法达到最佳图像!我想知道是否有人帮助我!
I=imread('hand.jpg');
h= fspecial('gaussian', 15,5);
s=imfilter(I,h,'symmetric');
q=graythresh(I)
BW=im2bw(I,q);
答案 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,[])
我的结果是:
从结构中对关键(峰和谷)的结构和提取进行特征估计的代码:
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];
此处idx
是xysamp
的索引,它提供图像中的实际边界位置。峰值和谷值的位置可能并不准确,因为我正在对边界进行采样,这是一种非常简单的方法来处理基于结构的问题。
谢谢
临界点提取结果: