PDF de programación - ITK, MEX y OpenMP

Imágen de pdf ITK, MEX y OpenMP

ITK, MEX y OpenMPgráfica de visualizaciones

Publicado el 21 de Abril del 2017
1.340 visualizaciones desde el 21 de Abril del 2017
524,2 KB
12 paginas
Creado hace 9a (24/03/2015)
Universidad Politécnica de Madrid

INFORMES:

ITK, MEX y OpenMP

Sandra Rodríguez Rodrigo

March 24, 2015

1

1 Índice

1 Índice

2 Introducción

3 ITK

3.1 Filtro binomial
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 MEX

4.1 Filtro binomial
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

3

3
3
5

6
6
8

5 OPENMP

5.1 Paralelización bwDistC . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Primera comprobación . . . . . . . . . . . . . . . . . . . . . .
5.2.2

9
9
9
9
Segunda comprobación . . . . . . . . . . . . . . . . . . . . . . 10

6 ITKMEX

11
6.1 Filtro binomial
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.2 Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2

2 Introducción

El objetivo de esta práctica es el estudio de las librerías ITK (Insight Segmenta-
tion and Registration Toolkit) así como de los interfaces MEX y OpenMp para el
tratamiento de imágenes.

3 ITK

3.1 Filtro binomial

Los filtros binomiales son estructuras eficientes basadas en los coeficientes binomiales
resultantes de la implementación de Gauss.

Este filtro usa la convolución gracias a la cual es posible simplificar las matemáticas
y ahorrar tiempo. También resulta muy útil para el procesamiento de imágenes en
algunos casos como para la detención de bordes.

Dado el siguiente código de Matlab:

1 f u n c t i o n imgSal = binomialMatlab ( imgEnt )
2 maskConv = [ 1 2 1 ; 2 4 2 ; 1 2 1 ] . / 1 6 ;
3 imgSal = i m f i l t e r ( imgEnt , maskConv , ’ r e p l i c a t e ’ ) ;
4 \ l a b e l {2}

Se nos pide conseguir una funcionalidad similar usando las librerías ITK. El primer
paso será escribir el archivo CMakeLists.txt

1 # Indicamos e l nombre que queremos que t e n g a n u e s t r o p r o y e c t o
2 PROJECT( B i n o m i a l F i l t r o )

3
4 #Buscamos
l i b r e r i a s de ITK
5 FIND PACKAGE(ITK REQUIRED)
6 INCLUDE( ${ITK USE FILE} )
7 # Indicamos que e l p r o y e c t o va a c r e a r una l i b r e r i a e i n d i c a m o s

l o s

a r c h i v o s que van a dar

l u g a r a l a l i b r e r i a
8 # Deben e s t a r c r e a d o s a n t e s de e j e c u t a r CMake
9 ADD EXECUTABLE( Binom

10

11

Binomial . cpp
Binomial . h

12
13 )
14 TARGET LINK LIBRARIES( Binom

${ITK LIBRARIES}

15
16 )
17 CMAKE MINIMUM REQUIRED(VERSION 2 . 6 )

3

A partir de ello, se determinan las carpetas donde se encuentran los Fuentes (Bi-
nomial.h y Binomial.cpp) y dónde queremos que se guarden los Binarios. Del filtro

solo se configurarán la imagen de entrada y el número de repeticiones que deseamos
que se ejecute. Por lo que, se tendrán como parámetros la imagen cameraman.tif
sobre la que se aplicará, el número de iteraciones elegidas (en nuestro caso 10) y la
imagen filtrada de salida.

1 t y p e d e f u n s i g n e d c h a r num ;
2 // Imagenes en 2D
3 c o n s t u n s i g n e d i n t numDims = 2 ;
4 t y p e d e f

i t k : : Image< u n s i g n e d char , numDims > ImageEnt ; // Imagen de

Entrada

5 t y p e d e f

i t k : : Image< u n s i g n e d char , numDims > ImageSal ;

// Imagen de

S a l i d a

6 t y p e d e f
7 t y p e d e f
8 t y p e d e f

i t k : : ImageFileReader < ImageEnt > ReaderType ;
i t k : : I m a g e F i l e W r i t e r < ImageSal > WriterType ;
i t k : : B i n o m i a l B l u r I m a g e F i l t e r <ImageEnt ,

ImageSal> B i n B l u r F i l t e r ;

4

3.2 Resultado

Se muestra el resultado con las ITK y se compara con el obtenido tras la imple-
mentación desde Matlab con la función binomialMatlab llamada 10 veces.

Figure 3.1: Imagen de entrada

Figure 3.2: ITK - Imagen de salida

Figure 3.3: binomialMatlab - Imagen de salida

El resultado es muy similar pero por diferencias en la implementación, si se ob-

servan detenidamente pixel a pixel se verá que no son iguales.

5

4 MEX

Las funciones MEX son muy útiles, ya que nos permiten emplear código escrito en
C/C+ desde Matlab.

4.1 Filtro binomial

Al igual que en el caso anterior, se pide implementar un filtro binomial que tenga la
funcionalidad descrita.

Sin embargo, para llevarlo se tienen en cuenta previamente las siguientes consid-

eraciones:

• Los bordes que conforman el borde será necesario replicar los valores antes de

aplicar el filtro

• Será necesario convertir los valores de unsigned char a coma flotante para el

caso de la entrada, y hacer la conversión opuesta para la salida.

• Debido a que la convolución de la imagen coincide con la correlación de la
misma con la máscara, por ser esta simétrica, se usará correlación a diferencia
de las ITK (además de ser más facil de implementar)

• Se dividirá la imagen en 9 partes para facilitar nuevamente la implementación.

En cuanto al CMakeLists.txt empleado:

1 PROJECT( f i l t r o B i n )
2 IF (WIN32) # Windows

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

SET(MATLAB LIB [HKEY LOCAL MACHINE\\SOFTWARE\\MathWorks\\MATLAB
SET(MATLAB INC ” [HKEY LOCAL MACHINE\\SOFTWARE\\MathWorks\\MATLAB

\\ 7 . 1 0 ;MATLABROOT] / e x t e r n / l i b / win64 / m i c r o s o f t )
\\ 7 . 1 0 ;MATLABROOT] / e x t e r n / i n c l u d e ” )

FIND LIBRARY(MATLAB MEX LIBRARY

libmex

${MATLAB LIB}

)

FIND LIBRARY(MATLAB MX LIBRARY

libmx
${MATLAB LIB}

)

FIND LIBRARY(MATLAB ENG LIBRARY

l i b e n g
${MATLAB LIB}

)

FIND PATH(MATLAB INCLUDE

”mex . h”
${MATLAB INC}

23

)

24 INCLUDE DIRECTORIES( ${MATLAB INCLUDE} )

ADD LIBRARY( f i l t B i n MODULE

25

26

6

27

u m b r a l i z a c i o n C . cpp
u m b r a l i z a c i o n C . h

28
29 )
30 IF (WIN32) # Windows

31

32

33

34

35

36

IF (CMAKE SIZEOF VOID P EQUAL 4 )

# 32 b i t s

SET TARGET PROPERTIES( f i l t B i n PROPERTIES SUFFIX ” . mexw32 ” )

ELSE(CMAKE SIZEOF VOID P EQUAL 4 ) # 64 b i t s

SET TARGET PROPERTIES( f i l t B i n PROPERTIES SUFFIX ” . mexw64 ” )

ENDIF(CMAKE SIZEOF VOID P EQUAL 4 )

37
38 ENDIF(WIN32)

39
40 # Indicamos que l a l i b r e r i a c r e a d a va a s e r de t i p o MEX
41 ADD DEFINITIONS(−DMATLAB MEX FILE)
42 IF (WIN32)

43

44

45

SET TARGET PROPERTIES( f i l t B i n

PROPERTIES
LINK FLAGS ”/ e x p o r t : mexFunction ”

)

46
47 ENDIF(WIN32)

l i b r e r i a s

i n t e r f a z

e n t r e Matlab y C++

48
49 #I n c o r p o r a r
50 SET(MATLAB LIBRARIES

l a s

${MATLAB MEX LIBRARY}
${MATLAB MX LIBRARY}
${MATLAB ENG LIBRARY}

53
54 )
55 TARGET LINK LIBRARIES( f i l t B i n

${MATLAB LIBRARIES}

51

52

56
57 )

Posteriormente, para la obtención del resultado final es necesario implementar la

siguiente función de test:

1 f u n c t i o n imgSal = t e s t ( )
2 imgEnt=imread ( ’ cameraman . t i f ’ ) ;
3 imgSal=f i l t B i n ( imgEnt ) ;
4 imshow ( [ imgEnt , imgSal ] ) ;

5
6 end

Siendo fitlBin el archivo obtenido después de compilar los binarios en Release con
Visual Studio.

En este caso, únicamente se tendrá como parámetro de entrada la imagen a aplicar

el filtro, en nuestro caso la ya tratada cameraman.tif

7

4.2 Resultado

Se obtienen los siguientes resultados:

Figure 4.1: Resultados con MEX

Figure 4.2: Resultados con binomialMatlab

8

5 OPENMP

La interfaz de programación de aplicaciones (API) OpenMp (Open Multi-Processing)
está destinada a la programación multiproceso de memoria compartida en múltiples
plataformas.

Permite el procesamiento en paralelo de programas escritos en C, C++ o Fortran.
Consiste además en un conjunto de directivas para el compilador, unas bibliotecas
de funciones y una serie de variables de entorno que controlan el comportamiento
de la ejecución.

Se basa en la existencia de múltiples hilos de ejecución que comparten una región

de memoria.

5.1 Paralelización bwDistC

Para esta parte, se partirá del código fuente en C++, bwDistC el cual implementa
la función bwdist que calcula para cada píxel de entrada la distancia más cercana a
un valor distinto de cero próximo a él. Tanto para la entrada como para la salida,
se usarán matrices lo que facilitará que se ejecute en paralelo.

El objetivo es probar a paralelizar distintas regiones del código y determinar cuál

es la más adecuada mediante una comparación de tiempos.

5.2 Resultado

5.2.1 Primera comprobación

Se hace paralelismo en la inicialización. Para poder llevarlo a cabo será necesario
modificar la siguiente línea de código:

1 #pragma omp p a r a l l e l
f o r
2 f o r ( i =0; i <numElem ; i ++) {
imgAntes [ i ]= imgIn [ i ] ;
imgOut [ i ] = 0 ;

3

}

4

5

s c h e d u l e ( g u i d e d )

Con la directiva pragma omp for se consigue que las iteraciones del del bucle
for que acompaña sean ejecutadas en paralelo. En el momento de la ejecución, las
iteraciones se distribuyen entre todos los hilos que se lancen.

9

Tras obtener los Binarios, obtener bwDistC.mexw64 compilando desde Release en
Visual Studio y gracias al script scriptBWDist.m con la imagen dada BWHig se ha
obtenido lo siguiente:

El código de C ha tardado una media de: 1.331467 s
El código de C paralelizado ha tardado una media de: 1.272789 s

Se observa que gracias a la paralelización se minoriza el tiempo.

5.2.2 Segunda comprobación

Se realiza nuevamente otra prueba haciendo paralelismo en el bucle for de dilatación:

s c h e d u l e ( g u i d e d )

1 #pragma omp p a r a l l e l
f o r
2 f o r ( k=0;k<n s l i c e s ; k++) {
f o r ( j =0; j <n c o l ; j ++) {

3

f o r ( i =0; i <nrow ; i ++) {

i n d = i+j ∗nrow+k∗ numElemSlice ;
i f ( imgDespues [ i n d ]= imgAntes [ i n d ] )
c o n t i n u e ;
i f ( i −1>=0)
i f ( imgDespues [ i n d ]= imgAntes [ ind −1])

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

c o n t i n u e ;

i f ( i +1<nrow )

i f ( imgDespues [ i n d ]= imgAntes [ i n d +1])

c o n t i n u e ;

i f ( j
  • Links de descarga
http://lwp-l.com/pdf3148

Comentarios de: ITK, MEX y OpenMP (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad