如何解决霍夫变换瞳孔检测
所以我正在为我的论文工作,我必须使用霍夫变换从图像中检测瞳孔。到目前为止,我写了一个代码来识别图像上的 2 个圆圈,但现在我必须让黑色圆圈远离瞳孔。
当我运行代码时,它识别出我的瞳孔,但也在脸颊上随机出现一个圆圈。我的教授说我应该计算像素平均值,并考虑到瞳孔是黑色的事实,只保留该区域的像素。我不知道该怎么做。
我将让我的代码在这里看看,如果有人对我应该如何编写并只保留黑色像素有想法,那就太好了。我还附上了最终的图像,看看我得到了什么。
关闭所有 清除所有 path='C:\Users\Ioana PMEC\OneDrive\Ioana personal\diseratie\test.jpg';
%Citire imagine initiala
xx = imread(path);
figure
imshow(xx)
title('Imagine initiala');% Binarizarea imaginii initiale
yy = rgb2gray(xx);
figure
imshow(yy);
title('Imagine binarizata');
e = edge(yy,'canny');
imshow(e);
radii = 11:1:30;
h = circle_hough(e,radii,'same','normalise');
peaks = circle_houghpeaks(h,'nhoodxy',15,'nhoodr',21,'npeaks',2);
imshow(yy);
hold on;
for peak = peaks
[x,y]=circlepoints(peak(3));
plot(x+peak(1),y+peak(2),'r-');
end
hold off
测试图片
最终图像解决方法
我实现了一些应该为您完成任务的东西。该示例使用您提供的图像完成。
第 1 步:读取文件并将其转换为灰度。
path = %user input;
RGB = imread(path);
lab = rgb2lab(RGB);
grayscale_image = rgb2gray(RGB);
第 2 步: 使用给定的参数进行霍夫变换。 这些以及灵敏度可以根据您的任务进行调整。 提示: 使用图像分割器工具箱快速查找参数。接下来,推断的圆被转换为整数值,因为这些是索引所必需的。
min_radius = 10;
max_radius = 50;
% Find circles
[centers,radii,~] = imfindcircles(RGB,[min_radius max_radius],'ObjectPolarity','dark','Sensitivity',0.95);
centers = uint16(centers);
radii = uint16(radii);
第 3 步: 获取圆圈的亮度值。 从圆心和半径值,我们推断出它们各自的亮度。仅检查中心左侧/右侧和上方/下方的 x 和 y 像素值就足够了。 (-1 只是完全留在圈子内的安全边际。)
brightness_checker = zeros(2,max(radii),2);
for i=1:size(centers,1)
current_radii = radii(i)-1;
for j=1:current_radii
% X-center minus radius,step along x-axis
brightness_checker(i,j,1) = grayscale_image((centers(i,2) - current_radii/2) + j,...
(centers(i,1) - radii(i)/2) + j);
% Y-center minus radius,step along y-axis
brightness_checker(i,2) = grayscale_image((centers(i,1) - current_radii/2) + j);
end
end
步骤 4: 检查哪个圆圈是瞳孔。 30 的确定值可能会得到提高。
median_x = median(brightness_checker(:,:,1),2);
median_y = median(brightness_checker(:,2),2);
is_pupil = (median_x<30)&(median_y<30);
pupils_center = centers(is_pupil == true,:);
第 5 步: 画学生。 标记可以更改。参考: https://de.mathworks.com/help/matlab/ref/matlab.graphics.chart.primitive.line-properties.html
figure
imshow(grayscale_image);
hold on
plot(centers(:,centers(:,'r+','MarkerSize',20,'LineWidth',2);
hold on
plot(pupils_center(:,pupils_center(:,'b+',2);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。