-
Notifications
You must be signed in to change notification settings - Fork 0
/
rotomaticExp.m
57 lines (50 loc) · 1.49 KB
/
rotomaticExp.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
function imgrot2=rotomaticExp(img)
% 1) limite superior barra amarilla ubicada en HSV
% 2) eliminacion outliers limite superior
% 3) ajuste pendiente a estos puntos
% 4) rotacion y exportacion imagen
% ecualiza la imagen en RGB
imgAdj=imadjust(img,stretchlim(img));
% Barra amarela
[supi,sizeSupi,HSV,filas,columnas,colores]=BarraAmarela(imgAdj);
% rotar con pendiente de ajuste a supi
p=polyfit(supi(:,1),supi(:,2),1);
Ang=(180/pi)*atan(p(1));
%if abs(Ang)>0.1;
imgrot=imrotate(imgAdj,Ang,'bilinear');
% recorte de imagen
reborde=3; % pixels a "comerse"
Bizq=3; % borde izquierdo
Barr=3; % borde arriba
[Baba Bder]=size(imgrot);
Bder=columnas; % borde derecho
Baba=filas; % borde abajo
if p(1)>0
while imgrot(filas-reborde,Bizq,1)==0 % borde izquierdo abajo
Bizq=Bizq+1;
end
while imgrot(reborde,Bder,1)==0 % borde derecho arriba
Bder=Bder-1;
end
while imgrot(Barr,reborde,1)==0 % borde arriba izquierdo
Barr=Barr+1;
end
while imgrot(Baba,columnas-reborde,1)==0 % borde abajo derecho
Baba=Baba-1;
end
else
while imgrot(reborde,Bizq,1)==0 % borde izquierdo arriba
Bizq=Bizq+1;
end
while imgrot(filas-reborde,Bder,1)==0 % borde derecho abajo
Bder=Bder-1;
end
while imgrot(Barr,columnas-reborde,1)==0 % borde arriba izquierdo
Barr=Barr+1;
end
while imgrot(Baba,reborde,1)==0 % borde abajo derecho
Baba=Baba-1;
end
end
rect=[Bizq Barr (Bder-Bizq) (Baba-Barr)];
imgrot2=imcrop(imgrot,rect);