因此,我正在写论文,我必须使用Hough变换从图像中检测瞳孔。到目前为止,我写了一个代码,在我的图像上识别两个圆圈,但现在我必须从瞳孔中保留黑色圆圈。
当我运行代码时,它会识别我的瞳孔,还会在脸颊上随机画一个圆圈。我的教授说,我应该计算像素的平均值,并考虑到瞳孔是黑人的事实,只保留该区域的像素。我不知道该怎么做。
我将在这里让我的代码来看看,如果有人有一个想法,我应该如何编写这一点,并只保留黑色像素将是很好的。我还附上了最终的图像,看看我得到了什么。
关闭所有清除所有路径=‘C:\Users\Ioana PMEC\OneDrive\Ioana personal\Disertatie\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, radii, '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估计值

最终图像

发布于 2021-07-25 20:00:25
我实现了一些可以帮你完成任务的东西。该示例已使用您提供的图像完成。
第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, j, 2) = grayscale_image((centers(i,2) - current_radii/2) + j,...
(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(:,1), centers(:,2), 'r+', 'MarkerSize', 20, 'LineWidth', 2);
hold on
plot(pupils_center(:,1), pupils_center(:,2), 'b+', 'MarkerSize', 20, 'LineWidth', 2);这是最终输出:

https://stackoverflow.com/questions/68342941
复制相似问题