ALMACENAMIENTO DE OBJETOS

Anuncio
ALMACENAMIENTO DE OBJETOS
PRACTICO 4 – Ejercicio 1 b)
Regla de los segmentos
IMAGEN ORIGINAL
ARCHIVO: SEGMENTOS_EN_LINEA
257 258 71 13 27 71 14 27 71 15 27 71 16 27 71 17 27
71 18 27 71 19 27 71 20 27 71 21 27 71 22 27 71 23 27
71 24 27 71 25 27 71 26 27 71 27 27 71 28 27 71 29 27
71 30 27 71 31 27
109 31 26
33 32 23
71 32 27
ALMACENAMIENTO DE OBJETOS
public class UtilSegmentos
{
int[,] matriz_visitados;
ImagenBinaria I;
public ArrayList obtener_segmentos()
{
ArrayList lista=new ArrayList();int i;
for(int j=0; j<I.height; j++)
{i=0;
while(i<I.width)
{if(I.getPixel(i,j)==0) i++;
else {int count=0;
segmento s = new segmento();
s.set_pto(new Point(i,j));
i++;
while(I.getPixel(i,j)!=0 && i<I.width)
{i++;
count++;
}
s.set_count(count);
lista.Add(s); }}
}
return lista; }}}
Rotación, Traslación, Zoom
Práctico 4, Ejercicio 3 a)
X’ = X + DX
Y’ = Y + DY
Rotación, Traslación, Zoom
Práctico 4, Ejercicio 3 b)
NX = X.cos(ang) + Y.sen(ang)
NY= -X.sen(ang) + Y.cos(ang)
Rotación, Traslación, Zoom
Rotación, Traslación, Zoom
public static Bitmap AplicarZoom(Bitmap B, int f)
{
int lx = B.Width;
int ly = B.Height;
int ni, nj;
int nueva_lx = (int) (lx*(f/100f));
int nueva_ly = (int) (ly*(f/100f));
Bitmap x = new Bitmap(nueva_lx,nueva_ly);
for(int i=0; i < lx; i++)
for(int j=0; j < ly; j++)
{
ni=(nueva_lx*i)/lx;
nj=(nueva_ly*j)/ly;
x.SetPixel(ni,nj,B.GetPixel(i,j));
}
return x;
}
Transformaciones elásticas
xDestA = C1 + C2* xA + C3*yA + C4*xA*yA.
yDestA = C5 + C6* xA + C7*yA + C8*xA*yA.
Transformaciones elásticas
Aplicaciones
Simulación de
proyecciones
Reconocimiento de
cromosomas por
comparación con
ideogramas.
(múltiples regiones)
Erosión
Práctico 5. Ejercicio 3 a)
void TForm::erosion()
{ int i,j,k,l;
Byte max;
Byte *Po,*Pd;
Graphics::TBitmap *F=new Graphics::TBitmap();
F->Height=Bitmap->Height;
F->Width=Bitmap->Width;
F->Assign(Bitmap);
for(j=1;j<F->Height-1;j++)
{ Pd=(Byte*)Bitmap->ScanLine[j];
for(i=1;i<F->Width-1;i++)
{ max=0;
for(l=-1;l<2;l++)
{ Po=(Byte*)F->ScanLine[j+l];
for(k=-1;k<2;k++)
if(Po[i+k]>max)max=Po[i+k];
}
Pd[i]=max;
}
}
delete F;
Image1->Canvas->Draw(0,0,Bitmap);
}
Dilatación
Práctico 5. Ejercicio 3 b)
void TForm::dilatacion()
{ int i,j,k,l;
Byte min;
Byte *Po,*Pd;
Graphics::TBitmap *F=new Graphics::TBitmap();
F->Height=Bitmap->Height;
F->Width=Bitmap->Width;
F->Assign(Bitmap);
for(j=1;j<F->Height-1;j++)
{ Pd=(Byte*)Bitmap->ScanLine[j];
for(i=1;i<F->Width-1;i++)
{ min=255;
for(l=-1;l<2;l++)
{ Po=(Byte*)F->ScanLine[j+l];
for(k=-1;k<2;k++)
if(Po[i+k]<min)min=Po[i+k];
}
Pd[i]=min;
}
}
Image1->Canvas->Draw(0,0,Bitmap);
delete F;
}
Opening y Closing
Erosión condicional:
Erosión con la
condición que no corte
al
objeto en dos.
Dilatación condicional:
Dilatación con la
condición de que no una
al objeto con otro.
Opening: Erosión
seguida de dilatación
condicional.
Esqueletización
Práctico 5. Ejercicio 4
El conjunto de puntos que se encuentra equidistante de su contorno
0
0
0
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
divide
No divide
if((Pd[i]!=max)&& (noDivide(M)))Pd[i]=max;
Modelos de color
HSV (Hue-Saturation-Value)
H: Color
S: Saturación o Pureza (Cuanto
esta diluido el color)
V: Valor (Representación de la
intensidad)
Modelos de color
Práctico 6. Ejercicio 3
public static int[] RGBaHSV(int r, int g, int b)
{
float max=-2,min=300;
max = maximo(g,r,b)
min = minimo(r,g,b)
if(max==min) max+=0.2f;
int[] hsv = new int[3];
hsv[2]=(int)max;
hsv[1]=(int)((max-min)/max);
if(r==(int)max && g>=b) hsv[0]=(int)(60*(g-b)/(max-min))+0;
else
{
if(r==(int)max && g<b) hsv[0]=(int)(60*(b-g)/(max-min))+360;
else
{
if(g==(int)max) hsv[0]=(int)(60*(b-r)/(max-min))+120;
else if(b==(int)max) hsv[0]=(int)(60*(r-b)/(max-min))+240;
}
}
return hsv;
}
Modelos de color
Práctico 6. Ejercicio 3
Descargar