Beruflich Dokumente
Kultur Dokumente
CICLO: IV SEMESTRE
% Imagen
% Cuarto semestre
clear all;
clf;
clc;
J = imread('perrito.jpg');
figure(1); imshow(J)
I = rgb2gray(J);
figure(2);imshow(I);title('Original Image');
text(size(I,2),size(I,1)+15, ...
'logo de la
UNCP','FontSize',7,'HorizontalAlignment','right');
La imagen a leer debe encontrarse en la carpeta de trabajo de Matlab. Los
formatos de imagen soportados por Matlab son: TIFF, JPEG, GIF, BMP, PNG,
XWD.
Una imagen de color RGB se representa por tres matrices bidimensionales,
correspondientes a los planos R, G y B. Para obtener los planos RGB se ejecutan
los comandos:
p = impixel(J,20,18)
figure(7);imshow(p)
El tipo de dato matriz, que contendrá una imagen puede ser de varios tipos (según
el tipo de dato de cada pixel):
- double: Doble precisión, números en punto flotante que varían en un rango
aproximado de -10308 a 10308 (8 bytes por elemento)
uint8: Enteros de 8 bits en el rango de [0,255] (1 byte por elemento)
uint16: Enteros de 16 bits en el rango de [0, 65535] (2 bytes por elemento)
uint32: Enteros de 32 bits en el rango de [0, 4294967295] (4 bytes por
elemento)
int8: Enteros de 8 bits en el rango de [-128, 127] (1 byte por elemento)
int16: Enteros de 16 bits en el rango de [-32768, 32767] (2 bytes por
elemento)
int32: Enteros de 32 bits en el rango de [-2147483648,2147483647] (4
bytes por elemento)
logical: Los valores son 0 ó 1 (1 bit por elemento)
Conversión entre tipos de datos: Para ciertas operaciones es necesario
convertir una imagen de su tipo original a otro tipo de imagen que facilite su
procesamiento. Algunos métodos:
Algunos comandos que pueden utilizarse para determinar el tipo de imagen con
que se está trabajando:
% Utlizacion de ventanas
subplot (2,1,1)
imshow(J)
subplot(2,1,2)
imshow(p)
4. Tranformaciones de intensidad
La sintaxis para aplicar una transformación de intensidad a una imagen f es:
>> g = imadjust (f, [low_in high_in], [low_out high_out])
Aplica los valores de intensidad de la imagen f (uint8, uint16 o doublé) que están
en el intervalo [low_in high_in] en valores del intervalo, [low_out high_out]
(considerando valores entre 0 y 1).
Transformación gamma:
>> g = imadjust (f, [low_in high_in], [low_out high_out], gamma)
Por ejemplo:
% Transformación de imagenes
%g = imadjust (f, [low_in high_in], [low_out high_out],
gamma)
figure(9)
g = imadjust (J, [0 1], [1 0], 1.2);% gamma es >1
subplot(2,2,1)
imshow(g)
RGB1 = imread('perrito.jpg');
RGB2 = imadjust(RGB1,[.2 .3 0; .6 .7 1],[]);
subplot(2,2,2)
g1= imadjust (J, [0 1], [1 0], 1.0); % gamma es = 1.0
imshow(g1);
subplot(2,2,3)
imshow(RGB2);
subplot(2,2,4)
g1 = imadjust (J, [0.2 0.8], [0.7 0.3], 0.6); %gamma <1
imshow(g1);
Transformación log:
La transfomación utilizando log.
>> g = c * log (1 + double(f))
% Transformación de log.
RGB1 = imread('perrito.jpg');
RGB2 = double(RGB1); %Imagen double
g = log(1+RGB2); %imagen doble
g1 = mat2gray(g);
g2 = im2uint8(g1);
figure(10)
subplot(1,2,1); imshow(RGB1); title('imagen original');
subplot (1,2,2);imshow(g2);title('Transformación log');
5. Histograma de la Imagen
>> imhist (f,n)
Donde n es el número de intervalos (subdivisiones de la escala de intensidad)
usados para formar el histograma, cuyo valor por defecto es 256.
>> imhist (f,n)/numel(f)
Histograma normalizado
>> g = histeq(f, n)
Histograma ecualizado, donde n indica el número de niveles de intensidad
específico para la imagen de salida, por ejemplo, n=256.
Histograma de una Imagen:
%histograma normalizado
subplot(1,3,3)
f2=imhist(f1,120)/numel(f1)
imshow(f2);
6. Filtros especiales
>> g = imfilter(f, w, ‘replicate’)
- f es la imagen de entrada
- w es la máscara
- ‘replicate’: el tamaño de la imagen se aumenta duplicando los valores
del borde. Hay más opciones para tratar el borde.
- Las máscaras se pueden definir manualmente (como matriz). Por
ejemplo:
- >> w = 1/9*[1 1 1;1 1 1;1 1 1]; o bien
- >> w = 1/9*ones(3);
Las máscaras más implementadas en Matlab:
a) Filtros de la mediana
>> g = medfilt2(f, [m n] );
[m n] = tamaño de la máscara (por defecto 3x3).
Añadir ruido a una imagen:
% filtros especiales
figure(12)
subplot(2,2,1)
f = imread('perrito.jpg')
f1=rgb2gray(f);
imshow(f)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% agregando ruido
subplot(2,2,2)
g = imnoise(f1,'salt & pepper', 0.2);
imshow(g);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% filtro media
subplot(2,2,3)
m1 = fspecial('average',3);
f_med=imfilter(g,m1);
imshow(f_med);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(2,2,4)
% filtro f_mediana
f_mediana=medfilt2(g,[3 3]);
imshow(f_mediana)
figure(13);
f = imread('perrito.jpg')
m=fspecial('laplacian',0.7);
g = imfilter(f,m,'replicate');
subplot(1,2,1)
imshow(f);
subplot(1,2,2)
imshow(g);
7. Transformada Discrete de Fourier
>> F=fft2 (f)
Transformada discreta de Fourier de la imagen f, luego es una matriz de valores
complejos.
>> abs (F)
Magnitud de los valores complejos de la TDF (espectro de Fourier).
>> fftshift (F)
TDF desplazada (F(0,0) en el centro de frecuencias).
>> f=ifft2 (F)
TDF inversa.
clear all;clf
clc
J = imread('gatito.jpg');
figure; imshow(J)
I = rgb2gray(J);
figure;imshow(I);title('Original Image');
text(size(I,2),size(I,1)+15, ...
'logo de la
UNCP','FontSize',7,'HorizontalAlignment','right');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%
% tranformda de fourier
y = fft2(I)
f2 = fftshift(y);
S= abs(f2)
figure; imshow(S,[]);
s2=log(130+S);
imshow(s2,[]);
8. Morfología
Dilatación:
>> imdilate (f,SE)
Erosión:
>> imdilate (f,SE)
Apertura:
>> imopen (f,SE)
Clausura:
>> imclose (f,SE)
SE indica el elemento estructural que puede definirse a partir de la función
STREL:
>> strel(‘diamond’,R)
>> strel(‘disk’,R)
>> strel(‘line’,length, angle)
>> strel(‘rectangle’,MN), MN=vector de dos elementos.
>> strel(‘square’,W)
figure(15)
f = imread('gatito.jpg');
SE = strel('square',35);
fdilatada = imdilate(f,SE);
ferosion = imerode(f,SE);
subplot(3,1,1)
imshow(f);
subplot(3,1,2)
imshow(fdilatada);
subplot(3,1,3)
imshow(ferosion);
1. Segmentación
>> [g, t] = edge(f, ’método’, parámetros)
La salida g es una matriz logical con 1 en los píxeles que el método detecta como borde y 0 en caso
contrario. La salida T es opcional, indica que el umbral que ha usado el método para obtener el
borde.
Sobel:
>> [g, t] = edge(f, ’sobel’, T, dir)
T umbral específico, en cuyo caso t=T.
dir = ‘horizaontal’, ‘vertical’ o ‘both’.
Prewitt:
>> [g, t] = edge(f, ’prewitt’, T, dir)
Roberts:
>> [g, t] = edge(f, ’ roberts’, T, dir)
LoG:
>> [g, t] = edge(f, ’log’, T, sigma)
sigma = desviación estándar (por defecto, sigma=2).
Canny:
>> [g, t] = edge(f, ’canny’, T, sigma)
T=[T1, T2] umbrales específicos.
sigma = desviación estándar del filtro de suavizado.
figure(16);
f = imread('gatito.jpg');
f1=rgb2gray(f);
[h1,t1]=edge(f1,'sobel');
[h2,t2]=edge(f1,'prewitt');
[h3,t3]=edge(f1,'roberts');
[h4,t4]=edge(f1,'log');
[h5,t5]=edge(f1,'canny');
subplot(2,3,1)
imshow(f1);
title('original')
subplot(2,3,2)
imshow(h1);
title('sobel');
subplot(2,3,3)
imshow(h2);
title('prewitt')
subplot(2,3,4)
imshow(h3);
title('roberts');
subplot(2,3,5)
imshow(h4);
title('log');
subplot(2,3,6)
imshow(h5);
title('canny')
10 Umbralización
>> im2bw(f, T)
Donde T es el umbral tal que todos los niveles de intensidad por debajo de T los
hace 0 y todos los que son mayores que T los hace 1. Dicho umbral se puede
obtener con la siguiente función la cual aplica el método de Otsu:
>> T=graythresh(f)
Umbralización
figure(17);
f= imread('gatito.jpg');
f1=rgb2gray(f);
subplot(1,3,1)
imshow(f);
title('original')
subplot(1,3,2)
imshow(f1);
title('gris')
subplot(1,3,3)
T=graythresh(f1);
fbinaria=im2bw(f1,T);
imshow(fbinaria);
title('binaria');
11.- Representación y descripción
Número de componentes conexas:
>> g = bwlabel(f, n)
donde n indica la adyacencia usada, es decir, n=4 o n=8. Esta función cuenta el
número de componentes conexas blancas luego, si consideramos que el objeto es
lo negro, debemos aplicar bwlabel a la imagen negativa de f.
figure(18)
f = [ 0 0 0 1;0 1 1 1; 0 0 1 1; 0 1 1 1];
subplot(1,2,1)
imshow(f);
title('Original');
[L,n]=bwlabel(f,4);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Negativo de una imagen
subplot(1,2,2)
fnegativa = not(f);
[Lneg,m]=bwlabel(fnegativa,4);
imshow(fnegativa);
title('negativo');
Función regionprops:
>> D = regionprops(L, properties)
Donde: L es una matriz de etiquetas de componentes conexas y D es una
estructura de array conteniendo propiedades de las distintas regiones de la
imagen binaria correspondiente a L.
figure(19)
f = imread('gatito.jpg');
g = padarray(f,[100 100]);
subplot(1,2,1)
imshow(f);
title('original');
subplot(1,2,2)
imshow(g);
title('modificada');
% imagen reflejada
figure(20)
f = imread('gatito.jpg');
f1 =rgb2gray(f);
h = fliplr(f1);
subplot(1,2,1)
imshow(f);
subplot(1,2,2)
imshow(h);
%rotacion de imagenes
figure(21)
f = imread('gatito.jpg');
r1 = imrotate(f,50);
r2 = imrotate(f,50,'crop');
subplot(1,3,1)
imshow(f);
title('original');
subplot(1,3,2)
imshow(r1);
title('sin corte');
subplot(1,3,3)
imshow(r2);
title('con corte')
Cambio de tamaño:
>> g=imresize(f,escala)
%Cambio de color
figure(22)
f = imread('gatito.jpg');
t1 = imresize(f,0.2);
t2 = imresize(f,0.5);
t3 = imresize(f,0.8);
subplot(2,2,1)
imshow(f);
title('original');
subplot(2,2,2)
imshow(t1);
title('Escala 0.2');
subplot(2,2,3)
imshow(t2);
title('Escala 0.5');
subplot(2,2,4)
imshow(t3);
title('Escala 0.8');