Operaciones básicas con imágenes

Anuncio
Guía
2
Facultad: Ingeniería.
Escuela: Biomédica
Asignatura: Imágenes Médicas
Operaciones básicas con imágenes
Objetivos
Que el estudiante complete una plataforma de conocimientos fundamentales
(ideas, terminología, etc.) en torno a los cuales habrá de girar el resto del
curso.
Que el estudiante sea capaz de interpretar y operar algoritmos que posibiliten
la realización de operaciones geométricas de imágenes.
Recomendaciones
• Tenga orden y aseo para trabajar
• Siempre que tenga duda del procedimiento a realizar, consúltelo con el
docente.
• Al finalizar el laboratorio se debe dejar en la misma condición en que se
encontró, aún los accesorios y herramientas utilizadas.
Materiales y equipos
Computadora con MatLab y Processing Image Toolbox
1
Guía
2
Procedimiento
1. Cargue a MATLAB las siguientes imágenes:
>> [a,m1]=imread('HWRsin2d_128x128_01_gray.jpg');
>> [b,m2]=imread('HWRsin2d_128x128_03_gray.jpg');
>> [c,m3]=imread('HWRsin2d_128x128_05_gray.jpg');
2. Verifique las imagines en el Workspace:
>> whos
Name
Size
Bytes Class
a
128x128
16384 uint8 array
b
128x128
16384 uint8 array
c
128x128
16384 uint8 array
m1
0x0
0 double array
m2
0x0
0 double array
m3
0x0
0 double array
Grand total is 49152 elements using 49152 bytes
OPERACIONES ARITMÉTICAS
Suma
En su forma más sencilla, la operación suma toma como entrada dos imágenes de tamaño
idéntico y produce como salida una tercera imagen del mismo tamaño de las primeras dos, en
la cual cada valor de píxel es la suma de los valores de los píxel correspondientes de cada una
de las dos imágenes de entrada. Existen versiones más sofisticadas que permiten la
combinación de más de dos imágenes con una única operación. Una variante común permite
adicionar una constante especifica a cada píxel.
La adición de dos imágenes se lleva en un único paso. Los valores de los píxel del resultado
vienen dados por:
2
Guía
2
Q(i, j ) = P1 (i, j ) + P2 (i, j )
O si solamente se desea adicionar un valor constante C a una imagen, entonces:
Q(i, j ) = P1 (i, j ) + C
Si los valores de los píxel en las imágenes de entrada son realmente vectores en lugar
de valores escalares (por ejemplo, imágenes a color) entonces los componentes individuales
(componentes rojo, azul y verde) se adicionan separadamente para producir el valor de salida.
Si el formato de la imagen que se esta utilizando soporta únicamente valores de píxel
enteros de 8 bits, es bastante probable que el resultado de la adición sea mayor que el máximo
permitido por el valor del píxel. El efecto de ello, dependerá de la implementación. Los valores
de píxel desbordados, deben tratarse de tal forma que se correspondan con los máximos
valores permitidos. Si el formato de la imagen soporta valores con un rango de valores mucho
más grande, por ejemplo un entero de 32 bits o números de puntos flotantes, este problema no
tiene tanta ocurrencia.
Resta
En su forma más sencilla, la operación resta toma como entrada dos imágenes y produce como
salida una tercera imagen en la cual cada valor de píxel es la resta de los valores de los píxel
de la primera imagen menos sus correspondientes de la segunda imagen. Una variante común
permite simplemente una constante especificada ser sustraída a cada píxel. Existen versiones
que solamente producen la diferencia absoluta entre valores de píxel, en lugar de una salida
signada.
La sustracción de dos imágenes se lleva a cabo en un único paso. Los valores de los píxel del
resultado vienen dados por:
Q(i, j ) = P1 (i, j ) − P2 (i, j )
O si la operación únicamente calcula las diferencias absolutas entre las dos imágenes de
entrada:
Q(i, j ) = P1 (i, j ) − P2 (i, j )
O si solamente se desea sustraer un valor constante C a una imagen simple, entonces:
Q(i, j ) = P1 (i, j ) − C
3
Guía
2
Si los valores de los píxel en las imágenes de entrada son realmente vectores en lugar de
valores escalares (por ejemplo, imágenes a color) entonces los componentes individuales
(componentes rojo, azul y verde) se sustraen separadamente para producir el valor de salida.
Diversas implementaciones de la operación varían respecto de lo que hacen si los valores del
píxel de salida son negativos. Algunos trabajan con formatos de imagen que soportan píxeles
con valores negativos, en cuyo caso la forma en que se desplegaran dependerá del mapa de
colores. Si el formato de la imagen no soporta valores negativos, a menudo tales píxeles se
ajustan a cero, con lo cual se tiene una imagen típicamente negra. De manera alterna, el
1
operador puede usar el método ‘wrap’ para los valores negativos, con lo que -30 aparecería en
el resultado como 226 (asumiendo píxeles de 8 bits).
Si la operación calcula las diferencias absolutas y las dos imágenes de entrada utilizan el
mismo tipo de valor de píxel, es imposible entonces que los valores del píxel de salida estén
fuera de rango, respecto al tipo de píxel de entrada.
3. Dado que las imágenes son de la misma medida, se puede hacer la operación de suma o
resta directamente indicando la operación, así:
>> clear, close all
>> a=double(a);
>> b=double(b);
>> c=double(c);
>> d=a-b;
>> e=a-c;
>> f=b+c;
>> figure(1),subplot(3,3,1),imshow(a,m1),title('a');
>> figure(1),subplot(3,3,4),imshow(b,m2) ,title('b');
>> figure(1),subplot(3,3,7),imshow(d,m1) ,title('a-b');
>> figure(1),subplot(3,3,2),imshow(a,m1) ,title('a');
>> figure(1),subplot(3,3,5),imshow(c,m3) ,title('c');
>> figure(1),subplot(3,3,8),imshow(e,m1) ,title('a-c');
>> figure(1),subplot(3,3,3),imshow(b,m2) ,title('b');
>> figure(1),subplot(3,3,6),imshow(c,m3) ,title('c');
>> figure(1),subplot(3,3,9),imshow(f,m2) ,title('b+c');
4. Escriba el siguiente archivo m que realiza la Suma de dos imágenes, no importando que
>> clear, close all
ambas sean de diferente tamaño:
1 Significa que si el valor es más grande que el valor posible, se sustrae el rango de valores de píxel de tal forma
que el valor inicie desde el valor mínimo posible.
4
Guía
function c=suma(a,b)
a=double(a);
b=double(b);
n = min([size(a,1) size(b,1)]);
m = min([size(a,2) size(b,2)]);
for i=1:n
for j=1:m
c(i,j)=a(i,j)+b(i,j);
end
end
c=uint8(c);
5. Para la Resta lo único que se ha de cambiar es el signo:
function c=resta(a,b)
a=double(a);
b=double(b);
n = min([size(a,1) size(b,1)]);
m = min([size(a,2) size(b,2)]);
for i=1:n
for j=1:m
c(i,j)=a(i,j)-b(i,j);
end
end
c=uint8(c);
6. Cargue las siguientes imágenes:
>> [a256,m256] = imread('padro_256x256.jpg');
>> [a512,m512] = imread('padro_512x512.jpg');
7. Realice las siguientes operaciones:
>> c=suma(a256,a512);
>> d=resta(a512,a256);
2
5
Guía
2
>> figure(1),subplot(1,3,1),imshow(a256,m256),title('a256 (256x256)');
>> figure(1),subplot(1,3,2),imshow(a512,m512),title('a512 (512x512)');
>> figure(1),subplot(2,3,3),imshow(c,m512),title('a256+a512');
>> figure(1),subplot(2,3,6),imshow(d,m512),title('a512-a256');
8. Evalúe el resultado obtenido
Multiplicación
Como sucede con otras operaciones aritméticas, la multiplicación presenta dos formas
principales. La primera forma toma dos imágenes de entrada y produce una imagen de salida
en la cual los valores de los píxeles son solo aquellos de la primera imagen multiplicados por
los valores correspondientes en la segunda imagen. La segunda forma toma una única imagen
de entrada y produce un resultado en el cual cada valor de píxel es multiplicado por una
constante, la cual debe ser especificada. Esta última forma es probablemente la más
ampliamente utilizada, en un proceso conocido como escalado. (Este escalado en nivel de
grises, no debe confundirse con el escalado geométrico)
La multiplicación de dos imágenes se desarrolla de la siguiente forma:
Q(i, j ) = P1 (i, j ) × P2 (i, j )
Luego, el escalado por una constante sigue la siguiente formulación matemática:
Q(i, j ) = P1 (i, j ) × C
La constante en este caso, es a menudo un punto flotante, y puede ser menor que uno, en
cuyo caso se reducirá la intensidad de la imagen. Este puede incluso ser negativo si el formato
de la imagen lo soporta.
Si los valores de píxel en las imágenes de entrada son realmente vectores en lugar de valores
escalares (por ejemplo, imágenes a color) entonces los componentes individuales
(componentes rojo, azul y verde) se multiplican separadamente para producir el valor de salida.
Si los valores calculados son mas grandes que el máximo permitido por el valor del píxel,
entonces deben ser truncados al máximo valor, o sufrir el mismo procedimiento ‘wrap’ antes
descrito.
9. Para la Multiplicación de una imagen por una constante:
>> clear, close all
>> [a,m1]=imread('HWRsin2d_128x128_01_gray.jpg');
>> a=double(a);
6
Guía
2
>> a_mult1=0.5*a;a_mult1=uint8(a_mult1);
>> a_mult2=2*a;a_mult2=uint8(a_mult2);
>> a_mult3=4*a;a_mult3=uint8(a_mult3);
>> a_mult4=8*a;a_mult4=uint8(a_mult4);
>> a=uint8(a);
>> figure (1),subplot(1,5,1),imshow(a),title('a');
>> figure (1),subplot(1,5,2),imshow(a_mult1),title('0.5*a');
>> figure (1),subplot(1,5,3),imshow(a_mult2),title('2*a');
>> figure (1),subplot(1,5,4),imshow(a_mult3),title('4*a');
>> figure (1),subplot(1,5,5),imshow(a_mult4),title('8*a');
10. Evalúe el resultado obtenido
División
La operación de división de imágenes, toma normalmente dos imágenes como entrada y
produce una tercera cuyos valores de píxel son los valores de píxel de la primera imagen
dividido por los valores de píxel correspondientes de la segunda imagen. Muchas
implementaciones pueden ser utilizadas con una única imagen de entrada, en cuyo caso cada
valor de píxel en la imagen se divide por una constante específica.
La división de dos imágenes es desarrollada mediante la siguiente formulación matemática:
Q(i, j ) = P1 (i, j ) ÷ P2 (i, j )
Luego, la división por una constante se define de la siguiente manera:
Q(i, j ) = P1 (i, j ) ÷ C
Si los valores de los píxel en las imágenes de entrada son realmente vectores en lugar de
valores escalares (por ejemplo, imágenes a color) entonces los componentes individuales
(componentes rojo, azul y verde) se dividen separadamente para producir el valor de salida.
Operación AND
La operación AND toma dos imágenes binarias o en niveles de grises como entrada,
produciendo una tercera imagen resultado, cuyos valores de píxel son los que se encuentren
en la primera imagen, “Y” que se encuentren en la segunda en el píxel correspondiente. Una
7
Guía
2
variación de esta operación toma únicamente una imagen y verifica la función AND con un
valor constante específico, con lo cual se obtiene un resultado.
La operación se desarrolla en un único paso. Es importante que todos los valores píxel de
entrada se operen teniendo el mismo número de bits. En aquellos valores de píxel de la imagen
de entrada que no son simples números binarios (1-bit), la operación AND normalmente se
desarrolla individualmente sobre cada bit correspondiente en los valores píxel.
La aplicación más obvia de la operación AND es calcular la intersección de dos imágenes.
Operación OR
La operación OR (y de manera similar la NOR), toma dos imágenes binarias o en escalas de
grises como entrada, y proporciona como resultado una tercera imagen cuyos valores píxel de
salida son los de la primera imágenes, “O” los píxeles correspondientes de la segunda. Una
variación de esta operación toma solamente una única imagen y desarrolla la operación OR de
cada píxel con un valor específico.
La operación se desarrolla en un único paso. Es importante que todos los valores píxel de
entrada se operen teniendo el mismo número de bits. En aquellos valores de píxel de la imagen
de entrada que no son simples números binarios (1-bit), la operación OR normalmente se
desarrolla individualmente sobre cada bit correspondiente en los valores píxel.
Operación NOT
La operación lógica NOT, toma una imagen binaria o en escala de grises como entrada y
produce su negativo fotográfico, es decir, las áreas oscuras en la imagen de entrada se
vuelven claras y viceversa. En otras palabras, mediante la aplicación de la operación NOT a
una imagen binaria, se cambia su polaridad. La operación NOT puede ser utilizada en
imágenes en escalas de grises siendo almacenada en formato de píxel de byte aplicándole una
operación a nivel de bits. El valor resultante para cada píxel es el valor de entrada sustraído de
255, que es el valor máximo posible.
Q(i, j ) = 255 − P1 (i, j )
Algunas aplicaciones de la inversión soportan valores enteros (integer) o de punto flotante (float
point). En este caso, no se puede utilizar la función lógica NOT, por lo tanto lo valores píxel de
la imagen invertida vienen dados por:
Q(i, j ) = − P1 (i, j )
8
Guía
2
2
Si esta imagen de salida se normaliza (8-bits), se puede obtener el negativo fotográfico de la
imagen original.
11. Escriba los siguientes archivos .m que realizan las operaciones And y Or respectivamente
de imágenes binarizadas:
function c=and(a,b)
n = min([size(a,1) size(b,1)]);
m = min([size(a,2) size(b,2)]);
for i=1:n
for j=1:m
c(i,j)=a(i,j)&b(i,j);
end
end
function c=or(a,b)
n = min([size(a,1) size(b,1)]);
m = min([size(a,2) size(b,2)]);
for i=1:n
for j=1:m
c(i,j)=a(i,j)|b(i,j);
end
end
12. Realice el siguiente procedimiento:
>> [a_bin,m_bin1]=imread('damero1.bmp');
>> [b_bin,m_bin2]=imread('damero2.bmp');
>> y_bin=and(a_bin,b_bin);
>> z_bin=or(a_bin,b_bin);
>> figure (1), subplot (1,3,1), imshow(a_bin); title('a_ bin');
>> figure (1), subplot (1,3,2), imshow(b_bin); title('b_ bin');
2 Es una técnica simple de mejora de imágenes que intenta mejorar el contraste en una imagen mediante la
extensión del rango de valores de intensidad que contiene para abarcar un rango deseado de valores (por ejemplo,
el rango completo de valores de píxel que un tipo específico de imagen permite). Este difiere de los histogramas de
ecualización más sofisticado en que solo puede aplicar una función de escalado lineal.
9
Guía
2
>> figure (1), subplot (2,3,3), imshow(y_bin);title('Operación And');
>> figure (1), subplot (2,3,6), imshow(z_bin);title('Operación Or');
13. Evalue el resultado obtenido
OPERACIONES PUNTUALES
Thresholding
Brief Description
In many vision applications, it is useful to be able to separate out the regions of the image
corresponding to objects in which we are interested, from the regions of the image that
correspond to background. Thresholding often provides an easy and convenient way to perform
this segmentation on the basis of the different intensities or colors in the foreground and
background regions of an image.
In addition, it is often useful to be able to see what areas of an image consist of pixels whose
values lie within a specified range, or band of intensities (or colors). Thresholding can be used
for this as well.
How It Works
The input to a thresholding operation is typically a grayscale or color image. In the simplest
implementation, the output is a binary image representing the segmentation. Black pixels
correspond to background and white pixels correspond to foreground (or vice versa). In simple
implementations, the segmentation is determined by a single parameter known as the intensity
threshold. In a single pass, each pixel in the image is compared with this threshold. If the pixel's
intensity is higher than the threshold, the pixel is set to, say, white in the output. If it is less than
the threshold, it is set to black.
In more sophisticated implementations, multiple thresholds can be specified, so that a band of
intensity values can be set to white while everything else is set to black. For color or multispectral images, it may be possible to set different thresholds for each color channel, and so
select just those pixels within a specified cuboid in RGB space. Another common variant is to
set to black all those pixels corresponding to background, but leave foreground pixels at their
original color/intensity (as opposed to forcing them to white), so that that information is not lost.
Guidelines for Use
Not all images can be neatly segmented into foreground and background using simple
thresholding. Whether or not an image can be correctly segmented this way can be determined
by looking at an intensity histogram of the image. We will consider just a grayscale histogram
here, but the extension to color is trivial.
If it is possible to separate out the foreground of an image on the basis of pixel intensity, then
the intensity of pixels within foreground objects must be distinctly different from the intensity of
pixels within the background. In this case, we expect to see a distinct peak in the histogram
corresponding to foreground objects such that thresholds can be chosen to isolate this peak
accordingly. If such a peak does not exist, then it is unlikely that simple thresholding will
produce a good segmentation. In this case, adaptive thresholding may be a better answer.
Figure 1 shows some typical histograms along with suitable choices of threshold.
10
Guía
2
Figure 1 A) shows a classic bi-modal intensity distribution. This image can be successfully
segmented using a single threshold T1. B) is slightly more complicated. Here we suppose the
central peak represents the objects we are interested in and so threshold segmentation requires
two thresholds: T1 and T2. In C), the two peaks of a bi-modal distribution have run together and
so it is almost certainly not possible to successfully segment this image using a single global
threshold
Adaptive Thresholding
Brief Description
Thresholding is used to segment an image by setting all pixels whose intensity values
are above a threshold to a foreground value and all the remaining pixels to a
background value.
Whereas the conventional thresholding operator uses a global threshold for all pixels,
adaptive thresholding changes the threshold dynamically over the image. This more
sophisticated version of thresholding can accommodate changing lighting conditions in
the image, e.g. those occurring as a result of a strong illumination gradient or shadows.
How It Works
Adaptive thresholding typically takes a grayscale or color image as input and, in the
simplest implementation, outputs a binary image representing the segmentation. For
each pixel in the image, a threshold has to be calculated. If the pixel value is below the
threshold it is set to the background value, otherwise it assumes the foreground value.
There are two main approaches to finding the threshold: (i) the Chow and Kaneko
approach and (ii) local thresholding. The assumption behind both methods is that
smaller image regions are more likely to have approximately uniform illumination, thus
being more suitable for thresholding. Chow and Kaneko divide an image into an array
of overlapping subimages and then find the optimum threshold for each subimage by
investigating its histogram. The threshold for each single pixel is found by interpolating
the results of the subimages. The drawback of this method is that it is computational
expensive and, therefore, is not appropriate for real-time applications.
11
Guía
2
An alternative approach to finding the local threshold is to statistically examine the
intensity values of the local neighborhood of each pixel. The statistic which is most
appropriate depends largely on the input image. Simple and fast functions include the
mean of the local intensity distribution,
the median value,
or the mean of the minimum and maximum values,
The size of the neighborhood has to be large enough to cover sufficient foreground and
background pixels, otherwise a poor threshold is chosen. On the other hand, choosing
regions which are too large can violate the assumption of approximately uniform
illumination. This method is less computationally intensive than the Chow and Kaneko
approach and produces good results for some applications.
Guidelines for Use
Like global thresholding, adaptive thresholding is used to separate desirable
foreground image objects from the background based on the difference in pixel
intensities of each region. Global thresholding uses a fixed threshold for all pixels in the
image and therefore works only if the intensity histogram of the input image contains
neatly separated peaks corresponding to the desired subject(s) and background(s).
Hence, it cannot deal with images containing, for example, a strong illumination
gradient.
Local adaptive thresholding, on the other hand, selects an individual threshold
for each pixel based on the range of intensity values in its local neighborhood.
This allows for thresholding of an image whose global intensity histogram
doesn't contain distinctive peaks.
TRANSFORMACIONES GEOMÉTRICAS
14. Escriba el siguiente archivo .m que realiza el Recorte (clipping)
function b=recorte(a,cmin,cmax)
12
Guía
if cmax<cmin | fix(cmax)-cmax~=0 | fix(cmin)-cmin~=0, return
end
n = size(a,1);
m = size(a,2);
for i=1:n
for j=1:m
if a(i,j)>cmax, b(i,j)=cmax;
elseif a(i,j)>=cmin & a(i,j)<=cmax, b(i,j)=a(i,j);
else b(i,j)=cmin;
end
end
end
b=uint8 (b);
15. Realice el siguiente procedimiento:
>> [a_rec,m_rec]=imread('padro_tartan.jpg');
>> figure (1), subplot (1,2,1), imshow(a_rec);
>> figure (1), subplot (1,2,2), imhist(a_rec);
>> y1=recorte(a_rec, 0,128);
>> figure (2), subplot (1,2,1), imshow(y1);
>> figure (2), subplot (1,2,2), imhist(y1);
>> y2=recorte(a_rec, 129,255);
>> figure (3), subplot (1,2,1), imshow(y2);
>> figure (3), subplot (1,2,2), imhist(y2);
>> y3=recorte(a_rec, 200,255);
>> figure (4), subplot (1,2,1), imshow(y3);
>> figure (4), subplot (1,2,2), imhist(y3);
2
13
Guía
16. Ahora escriba el siguiente archivo que realiza el Umbralizado (thresholding):
function c=umbral(a,x,y,t)
a=double(a)
[n,m] = size(a);
for i=1:n
for j=1:m
if a(i,j)<t, c(i,j)=x;
else c(i,j)=y;
end
end
end
c=uint8 (c);
17. Realice el siguiente procedimiento:
>> [a_umb,m_umb]=imread('padro_tartan.jpg');
>> figure (1), subplot (1,2,1), imshow(a_umb);
>> figure (1), subplot (1,2,2), imhist(a_umb);
>> x1=umbral(a_umb,75,130,100);
>> figure (2), subplot (1,2,1), imshow(x1);
>> figure (2), subplot (1,2,2), imhist(x1);
>> x2=umbral(a_umb, 100,200,130);
>> figure (3), subplot (1,2,1), imshow(x2);
>> figure (3), subplot (1,2,2), imhist(x2);
>> x3=umbral(a_umb,100,200,150);
>> figure (4), subplot (1,2,1), imshow(x3);
>> figure (4), subplot (1,2,2), imhist(x3);
18. Evalue el resultado obtenido
2
14
Guía
2
19. La Traslación de la imagen se logra con la implementación del siguiente archivo .m
function c=trasla(a,x,y)
[m,n]=size(a);
for i=1:m,
for j=1:n,
ii=i+y;
jj=j+x;
if ii>0 & jj>0,
c(ii,jj)=a(i,j);
end
end
end
20. Realice el siguiente procedimiento:
>> zz=imread('MagiCesc.jpg');
>> figure (1), imshow(zz)
>> [zz_ind,mzz]=rgb2ind(zz,256);
>> zz_trasl=trasla(zz_ind,75,50);
>> figure (2), imshow (zz_trasl,mzz);
21. La Rotación de la imagen para un ángulo de 0 a 180 grados en el sentido contrario de las
agujas del reloj se logra escribiendo el siguiente archivo .m.
function b=rot(a,ang)
[m,n]=size(a);
if ang>0 & ang<=pi/2,
c=round(m*sin(ang)+n*cos(ang))+1;
d=round(m*cos(ang)+n*sin(ang))+1;
for i=1:c,
for j=1:d,
iii=i-n*sin(ang)-1;
ii=round(j*sin(ang)+iii*cos(ang));
jj=round(j*cos(ang)-iii*sin(ang));
if ii>0 & ii<=m & jj>0 & jj<=n,
15
Guía
2
b(i,j)=a(ii,jj);
end
end
end
elseif ang>pi/2 & ang<=pi,
c=round(m*sin(ang)-n*cos(ang))+1;
d=round(m*sin(ang)-n*cos(ang))+1;
%e=n*sin(ang-pi/2);
e=-n*cos(ang);
for i=1:c,
for j=1:d,
iii=i-c-1;
jjj=j-e-1;
ii=round(jjj*sin(ang)+iii*cos(ang));
jj=round(+jjj*cos(ang)-iii*sin(ang));
if ii>0 & ii<=m & jj>0 & jj<=n,
b(i,j)=a(ii,jj);
end
end
end
end
22. Realice el siguiente procedimiento:
>> [a_rot]=imread('brujula.jpg');
>> a_rot=rgb2gray(a_rot);
>> figure(1),imshow(a_rot);
>> b_rot=rot(a_rot,pi/3);
>> figure(2),imshow(b_rot);
23. La Reflexión vertical (verefle) así como la Reflexión horizontal (horefle) y la Reflexión
respecto al origen (orefle), se consiguen mediante los siguientes archivos .m.
function c=verefle(a)
[m,n]=size(a);
for i=0:m-1,
for j=1:n
16
Guía
ii=m-i;
if ii>0,
c(ii,j)=a(i+1,j);
end
end
end
function c=horefle(a)
[m,n]=size(a);
for i=1:m,
for j=0:n-1
jj=n-j;
if jj>0,
c(i,jj)=a(i,j+1);
end
end
end
function c=orefle(a)
[m,n]=size(a);
for i=0:m-1,
for j=0:n-1
ii=m-i;
jj=n-j;
if ii>0 & jj>0,
c(ii,jj)=a(i+1,j+1);
end
end
end
2
17
Guía
2
Análisis de resultados
En la parte de suma y resta, ¿Qué hubiese pasado si en lugar de restar a la imagen a512
la a256, hubiese desarrollado el procedimiento contrario?
-
¿Que sucede cuando se divide una imagen entre una constante?
-
¿Cómo se utiliza el comando IMDIVIDE?
En el procedimiento 15, al sumar y1 y y3, ¿Por que no se consigue obtener la imagen
original?
-
¿Cual es la diferencia entre la función Umbral y la función Recorte?
¿Que es un histograma?, ¿Cuál es el procedimiento para ecualizar un histograma?,
realice el procedimiento con una imagen diferente a las utilizadas en la práctica.
-
¿Cómo se consigue el negativo de una imagen?
Desarrolle los procedimientos para la Reflexión vertical, horizontal y con respecto al
origen con una imagen médica que usted considere pertinente (que aporte elementos
necesarios para poder evaluar la función).
Investigación complementaria
Investigue o desarrolle una función que tenga como argumentos de entrada 2 puntos:
(i1, j1) y (i2, j2), que representen el vértice superior izquierdo y el vértice inferior derecho
respectivamente, de una sub-región rectangular que desee ser extraída de la imagen original.
Presente un procedimiento con su función desarrollada en una imagen médica que usted
considere pertinente. Utilice al menos tres veces la función sobre la imagen y guárdelos con
nombres diferentes.
Información adicional
http://www.imageprocessingplace.com/
http://www.mathtools.net/MATLAB/Image_Processing/
18
Descargar