Алгоритм:-
Мое решение реализует вашу задачу, используя следующий алгоритм:
1. Определение положения обоих глаз.
2. Нахождение угла между ними.
3. Поворот изображения на этот угол.
Входное изображение:-
Входное изображение этого кода — это то, которое вы получаете в конце кода, т. е. Q
.
а>
Код:-
% Dividing the image in two halves for better detection
% To see why , see this: https://www.mathworks.com/matlabcentral/answers/155126-how-does-the-vision-cascadeobjectdetector-detect-left-and-right-eyes-separately-it-is-constantly-de
n = fix(size(Q,2)/2);
lefthalf = Q(:,1:n,:);
righthalf = Q(:,n+1:end,:);
RightEyeDetect = vision.CascadeObjectDetector('RightEyeCART');
LeftEyeDetect = vision.CascadeObjectDetector('LeftEyeCART');
% vision.CascadeObjectDetector(EyePairBig) is not much efficient in this case
% because the image is tilted. So, detecting both eyes separately.
%Bounding Boxes
BBREye= step(RightEyeDetect,lefthalf); %Right eye is on our left
BBLEye= step(LeftEyeDetect,righthalf); %Left eye is on our right
BBLEye(1)=BBLEye(1)+n; %correcting the x position of left eye (caused due to dividing the image in two halves)
figure
imshow(imrotate(Q,(180/pi)*atan((BBREye(2)-BBLEye(2))/(BBREye(1)-BBLEye(1)))));
Вывод:-
а>
P.S.
1. Возможно, это не идеальное решение.
2. Предполагается, что нужно исправить только одно наклоненное лицо.
3. Точность этого решения зависит от точности обнаружения глаз, для которых работают встроенные функции MATLAB, основанные на алгоритме Виолы-Джонса. , используются.
4. В случае, если этот код не работает, вы можете проверить, правильно ли были обнаружены глаза, добавив следующие строки:
BBEyes= [BBLEye ; BBREye];
figure,
imshow(Q);
for i = 1:size(BBEyes,1)
rectangle('Position',BBEyes(i,:),'LineWidth',4,'LineStyle','-','EdgeColor','r');
end
Для вашего изображения, поскольку это сработало, вы все равно можете проверить, правильно ли были обнаружены глаза или нет. Результат следующий, который является правильным: -
person
Sardar Usama
schedule
04.09.2016
100_3082.jpg
. - person rayryeng   schedule 02.09.2016img
вместоI
здесь:I=imread('100_3082.jpg');
- person Sardar Usama   schedule 04.09.2016