虹膜识别(五):虹膜分割与图像归一化

(一)进一步分割

上面已经得到了关于分割区域的虹膜部分如下图所示:

 

内外圆之间的部分认为是要进行识别的部分。

该图的大小为600*800,内外圆的参数前面计算过,这里再给一遍:

mean_circle_in =[324 ; 332 ; 69];

mean_circle_out =[336 ; 340 ; 233];

参数形式为

%                   mean_circle   : 圆心横坐标

%                   mean_circle   :圆心纵坐标

%                   mean_circle   :圆的半径

现在去掉内外圆之外的部分,原理是直接对所有的像素点依次进行检验,比较它们到圆心的距离与所给圆的半径的大小,据此划分内外点。程序如下:

function img_new = wipeout(img,mean_circle_in,mean_circle_out)
%------------------------------输入参数-----------------------------
%   img : 原始图像
%   mean_circle_in: 分割内圆的参数
%   mean_circle_out:分割外圆的参数     
%          参数形式:   mean_circle(1) : 圆心横坐标
%                      mean_circle(2) :圆心纵坐标
%                      mean_circle(3) :圆的半径    
%                 
%------------------------------输出参数-----------------------------------
%    img_new:新分割图像
%[600 800]
[line,row]=size(img);  %取大小
for i = 1:line
    for j = 1:row     %计算距离
        dis = sqrt((i-mean_circle_out(1)).^2+(j-mean_circle_out(2)).^2);
        if dis > mean_circle_out(3)   %比较距离大小:外圆取大于
            img(i,j) = 255;
        end
    end
end
for i = 1:line
    for j = 1:row      %计算距离
        dis1 = sqrt((i-mean_circle_in(1)).^2+(j-mean_circle_in(2)).^2);
        if dis1 < mean_circle_in(3)     %比较距离大小:内圆取小于
            img(i,j) = 255;
        end
    end
end
img_new = img;

对最初始的灰度图像调用该函数并显示出来如下:

img_new = wipeout(img,mean_circle_in,mean_circle_out);imshow(img_new)

 

 

(二)关于图像归一化

图像归一化是指对图像进行了一系列标准的处理变换,使之变换为一固定标准形式的过程,该标准图像称作归一化图像。

我们这里的归一化是指要把圆环状的图像归一化为矩形的图像,这样既可以压缩图像的大小(去掉圆饼以外的白色不需要的像素)又便于后续的特征提取或者识别操作,处理的原理很简单,想想一下,就是把这个圆饼状从某处切开,然后分别往两边一拉就成矩形状了,当然这个过程会使得图像略有点变形,变形的部分我们用它邻近的像素点代替就可以了,比较这个影响不是很大。

算法上实现也很简单,重点是找到坐标的对应关系,如下图所示:

 

直观图为:


依此编写坐标变换算法:

 

function [img_rec,M,N] = circle2rectangle(img,mean_circle_in,gama_in,gama_out)
%------------------------------输入参数-----------------------------
%圆参数   mean_circle_in:
%                   mean_circle_in(1) : 圆心横坐标
%                   mean_circle_in(2) :圆心纵坐标
%                   mean_circle_in(3) :圆的半径
%
%          gama_in:归一化上边缘范围  一般半径的1.4倍较好
%          gama_out:归一化下边缘范围  一般半径的2.7倍较好
%-------------------------------------------------------------------
%------------------------------输出参数-----------------------------
%       img_rec: 归一化图像---》圆形转换的矩阵图
%      M,N  转换的矩阵图的 -- 行列的大小
%       
%-------------------------------------------------------------------
R_in =  round(mean_circle_in(3)*gama_in);  %限制半径
R_out = round(mean_circle_in(3)*gama_out);
%转换的列数
%N = 800;
N = round(pi*(R_out+R_in));
%转换的行数
% M = 100;
M = round(R_out-R_in);
alpha = 2*pi/N;
for k = 1:N
%内外圆的坐标矩阵
    point_A_x(1,k) = mean_circle_in(1) + R_in*cos(k*alpha);
    point_A_y(1,k) = mean_circle_in(2) + R_in*sin(k*alpha); 
    point_B_x(1,k) = mean_circle_in(1) + R_out*cos(k*alpha);
    point_B_y(1,k) = mean_circle_in(2) + R_out*sin(k*alpha); 
end
% figure,plot(point_A_x);
%重构要求的M*N矩阵坐标
for i = 1:M
    point_x(i,:) = round(point_A_x(1,:) + (point_B_x(1,:) - point_A_x(1,:))*i/M) ; 
    point_y(i,:) = round(point_A_y(1,:) + (point_B_y(1,:) - point_A_y(1,:))*i/M) ;
end
for i = 1:M      %映射关系
    for j = 1:N
        img_rec(i,j) = img(point_x(i,j),point_y(i,j));
    end
end

有了该函数,可以直接对圆心进行操作了,大概确定相应的参数后即可以实现了,例如选的一定的半径范围如下:

>> [img_rec,M,N] = circle2rectangle(img,mean_circle_in,1.4,3);

>> imshow(img_rec)

得到结果为:

 

>> M,N

M =110;N =955

同时新图像的大小也可以看到,相比原图像小了很多。为后续的处理提供了很大的方便。

  • 8
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
虹膜识别是一种生物特征识别技术,于识别人眼中的虹膜图像虹膜识别归一化分割是其中的一个重要步骤,它的目的是将虹膜图像中的虹膜区域从其他无关区域中分割出来,并进行归一化处理,以便后续的特征提取和匹配。 以下是一个简单的虹膜识别归一化分割代码示例: ```python import cv2 def iris_segmentation(image): # 载入虹膜图像 img = cv2.imread(image) # 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 进行边缘检测 edges = cv2.Canny(gray, 100, 200) # 进行轮廓检测 contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 找到最大的轮廓 max_contour = max(contours, key=cv2.contourArea) # 创建一个与原图像大小相同的掩膜图像 mask = np.zeros_like(gray) # 在掩膜图像上绘制最大轮廓 cv2.drawContours(mask, [max_contour], 0, 255, -1) # 对掩膜图像进行形态学操作,填充孔洞 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 将掩膜应用到原图像上,得到分割后的虹膜图像 segmented_image = cv2.bitwise_and(img, img, mask=mask) # 返回分割后的虹膜图像 return segmented_image # 调用虹膜分割函数 segmented_image = iris_segmentation('iris_image.jpg') # 显示分割后的虹膜图像 cv2.imshow('Segmented Iris Image', segmented_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码使用OpenCV库进行虹膜识别归一化分割。首先,将虹膜图像转换为灰度图像,并进行边缘检测。然后,通过轮廓检测找到最大的轮廓,并在掩膜图像上绘制该轮廓。接下来,使用形态学操作填充孔洞,并将掩膜应用到原图像上,得到分割后的虹膜图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值