Documentos de Académico
Documentos de Profesional
Documentos de Cultura
• Operador de Gradiente:
Primera y segunda
derivada.
Vector gradiente
Para detectar cambios de intensidad verticales debemos usar el vector
columna [-1 ; 1]:
>> I=imread(‘simpson.jpg’);
>> I1=rgb2gray(I);
>> Hy=imfilter(I1, [-1;1], ‘conv’) %Ojo acá! [-1;1] es vector columna
…….
>> Hx1=double(Hx)/255;
>> Hy1=double(Hy)/255;
>> Hxy=sqrt(Hx1.^2 + Hy1.^2);
>> imshow(Hxy)
Horizontal,vertical, juntos
Con los colores invertidos para apreciar mejor el borde:
>> Hx1=1-Hx1;
>> Hy1=1-Hy1;
>> Hxy=1-Hxy;
Gradiente: Operador de Roberts
Gradiente: Operador de Roberts…
Ejemplo usando la misma imagen de H. Simpson:
>> R=[0 0 0; 0 0 1; 0 -1 0];
>> H=imfilter(I1,R, ‘conv’);
>> imshow(H)
Gradiente: Operador de Roberts
% Imagen original
>> I=imread('moon.tif'); %Ya viene en dos dimensiones
% Máscara laplaciana
>> w=[0, 1, 0; 1, -4, 1; 0, 1, 0];
% Se aplica el filtro
>> I2=imfilter(I,w, ‘conv’);
>> LoG=fspecial(‘log');
>> g=imfilter(I1,LoG,‟conv‟);
>> imshow(g)
Comparaciones
Comparando
Sobel Laplaciano LoG
Operador LoG: Laplaciano del Gaussiano
Con diferentes desviaciones estándar:
Donde:
I:Imagen en escala de grises
método:es el tipo de filtro a usar, entre otros: ‘sobel’, ‘prewitt’,‘ roberts’, ‘log’,
‘canny’, etc.
im1=imread('moon.tif');
im1=rgb2gray(im1);
b1=edge(im1,'sobel','vertical');
b2=edge(im1,'sobel','horizontal');
b3=edge(im1,'sobel');
%% utilizar solo subplot e imshow para mostrar
subplot(2,2,1)
subimage(im1)
title('Imagen Original');
subplot(2,2,2), subimage(b1),title('Sobel Vertical');
subplot(2,2,3),subimage(b2),title('Sobel Horizontal');
subplot(2,2,4),subimage(b3),title('Sobel');
Edge con Log
Ejemplo: Log
im1=imread(moon.tif');
e=edge(im1, 'log');
subplot(1,2,1), subimage(im1), Title('Imagen Original');
subplot(1,2,2),subimage(e),Title('Laplaciano de Gaussiano');
Ejercicio 8
imfilter edge
Ejemplo con imfilter
>>im1=imread(‘moon.tif');
>>sf=fspecial('sobel');
>>sc=sf';
>>b1=imfilter(im1,sf);
>>b2=imfilter(im1,sc);
>>b3=imadd(b1,b2);
>>subplot(2,2,1),subimage(im1),Title('Imagen Original');
>>subplot(2,2,2),subimage(b2),Title('SobelVertical');
>>subplot(2,2,3),subimage(b1),Title('SobelHorizontal');
>>subplot(2,2,4),subimage(b3),Title('Sobel');
Segmentación
Segmentación
• La segmentación de imágenes divide la imagen en sus partes
constituyentes hasta un nivel de subdivisión en el que se aíslen las
regiones u objetos de interés.
Se divide la imagen basándose en la búsqueda de zonas que tengan valores
similares, conforme a unos criterios prefijados:
Umbralización: Los umbrales actúan como separadores que permitirán decidir que
conjunto de tonos de gris pertenece a una determinada región.
Segmentación: Umbral y multiumbral
• Como elegimos t?
Una respuesta es: Trabajamos con el histograma.
>>A=imread('geological01.jpg');
>> A1=A(:,:,1); %Siempre se trabaja en escala de grises
>> imhist(A1)
>> G=A1; %Para no modificar la original
>> G(A1<90)=0;
>> G(A1>=90)=255;
>> imshow(G)
Segmentación: Umbral y multiumbral Comando
graythresh
>>A=imread('geological01.jpg');
>> A1=A(:,:,1); %Siempre se trabaja en escalade grises
>> G= im2double(A1); % Ojo porque graythresh trabaja en double!!
>> umbral = graythresh(G);
>> G(G<=umbral)=0; %retorna 0.4353
>> G(G>umbral)=1;
>> imshow(G)
………………………..
Segmentación: Umbral y multiumbral Comando
graythresh
……………………
Podemos usar mecanismos manuales,por ejemplo el comando impixel:
>>A=imread('geological01.jpg');
>> A1=A(:,:,1); %Siempre se trabaja en escalade grises
>>imshow(A1)
>>impixel
ans=
156 156 156 % Tomamos este valor como umbral
>> G=A1;
>> G(A1<=156)=0;
>> G(A1>156)=1;
>> imshow(G)
Segmentación: Umbral y multiumbral Comando
graythresh
Graythresh también se puede utilizar con un comando que permite
binarizar directamente la imagen según el umbral dado:
…………………
Imfill “limpia imágenes”
• Puede ser interesante limpiar el interior de las monedas. Esto lo
podemos hacer con el siguiente comando:
…………
Podemos usar un comando para contar la cantidad de monedas. El siguiente comando
otorga etiquetas a cada objeto identificado:
>> [B,n] = bwlabel(fill,8); %fill es la imagen obtenida con el comando imfill y el nro 8
representa la cantidad de vecinos para determinar objetos conectados. Puede ser 4 ú 8
Por ejemplo, para ball debemos dar un radio, para square una medida de lado, etc.
Ejemplos:
I=imread('moon.tif');
z=fspecial('log',5,0.3);
g=imfilter(I,z,'conv');
se = strel('line',8,45);
D = imdilate(g,se);
imshow(D)
Erosion
De la misma manera, si los bordes resultan demasiado gruesos, hay un comando para
“erosionarlos”:
Ejemplo:
Result=imerode(Imagen,SE) originalBW = imread('circles.png');
se = strel('disk',11);
dónde erodedBW = imerode(originalBW,se);
imshow(originalBW),
SE es el elemento estructurante figure,
Imagen es previamente binarizada. imshow(erodedBW)
• Estando a 269km por encima de la superficie, cada pixel de la imagen
representa 2.35 km2 . Se quiere conocer la superficie del cráter y
diámetro vertical (máximo). Para esto se tiene que hacer lo siguiente: