Matlab - Guardar variables de un bucle for

 
Vista:
sin imagen de perfil

Guardar variables de un bucle for

Publicado por Félix (4 intervenciones) el 14/05/2015 21:17:05
Buenas tardes a todos,

Soy iniciado en MAtlab y quería pediros ayuda puesto que necesito hacer un programilla que sea capaz de leer las imágenes RGB contenidas en una carpeta, hacer 3 segmentaciones por cada una de las imágenes (visualizarlas) y crear las variables que contengan esas imágenes binarias. El código que tengo hecho hasta ahora es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function prueba
clear all;
close all;
S= dir('*JPG');
numero_muestras = size(S,1);
length(S);
for n=1:length(S);
    n
    nomefile=S(n).name;
    I=imread(nomefile);
    I_red=imresize(I,0.25);
    B = rgb2ycbcr(I_red);
    channel1Min = 0.000;
    channel1Max = 79.000;
    channel2Min = 48.000;
    channel2Max = 183.000;
    channel3Min = 144.000;
    channel3Max = 155.000;
    BW_hueso = (B(:,:,1) >= channel1Min ) & (B(:,:,1) <= channel1Max) & ...
    (B(:,:,2) >= channel2Min ) & (B(:,:,2) <= channel2Max) & ...
    (B(:,:,3) >= channel3Min ) & (B(:,:,3) <= channel3Max);
    BW_hueso = ~BW_hueso;
    BW_hueso=BW_hueso==0;
    BW_hueso = imfill(BW_hueso,'holes');
    maskedRGB_hueso = I_red;
    C = rgb2ycbcr(I_red);
    channel1Min = 0.000;
    channel1Max = 249.000;
    channel2Min = 116.000;
    channel2Max = 255.000;
    channel3Min = 0.000;
    channel3Max = 141.000;
    BW_tot = (C(:,:,1) >= channel1Min ) & (C(:,:,1) <= channel1Max) & ...
    (C(:,:,2) >= channel2Min ) & (C(:,:,2) <= channel2Max) & ...
    (C(:,:,3) >= channel3Min ) & (C(:,:,3) <= channel3Max);
    maskedRGB_tot = I_red;
    BW_tot=BW_tot==0;
    BW_tot = imfill(BW_tot,'holes');
    D=rgb2ycbcr(I_red);
    channel1Min = 31.000;
    channel1Max = 216.000;
    channel2Min = 101.000;
    channel2Max = 119.000;
    channel3Min = 132.000;
    channel3Max = 178.000;
    BW_lim = (D(:,:,1) >= channel1Min ) & (D(:,:,1) <= channel1Max) & ...
    (D(:,:,2) >= channel2Min ) & (D(:,:,2) <= channel2Max) & ...
    (D(:,:,3) >= channel3Min ) & (D(:,:,3) <= channel3Max);
    maskedRGB_lim=I_red;
    BW_lim = imfill(BW_lim,'holes');
    BW_lim = bwareaopen(BW_lim, 300);
    figure,subplot(2,2,1),imagesc(I_red),title(nomefile);
    subplot(2,2,2),imagesc(BW_hueso),title('Hueso');
    subplot(2,2,3),imagesc(BW_tot),title('Total');
    subplot(2,2,4),imagesc(BW_lim),title('Limite');
end
save prueba_felix BW_hueso BW_tot BW_lim;
load ('prueba_felix.mat');

El problema es que este código me muestra las imágenes bien para todas las fotos pero solo me guarda las variables BW_hueso, BW_tot y BW_lim de la última. No se como podría hacer en un for para ir guardando los valores de estas variables (son matrices) cada vez que lee una imagen para al final poder tener todos los valores (BW_hueso, BW_tot y BW_lim ) de todas las imágenes.

Espero haberme explicado

Muchas gracias por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Guardar variables de un bucle for

Publicado por Royeth (1818 intervenciones) el 14/05/2015 21:56:07
agrega antes del for con llaves para formar un array:

1
2
3
BW_hueso{1}=0;
BW_tot{1}=0;
BW_lim{1}=0;


y dentro del for las variables irían como:

BW_hueso{n} BW_tot{n} y BW_lim{n}


saludos
https://www.facebook.com/royethmatlab
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Guardar variables de un bucle for

Publicado por Félix (4 intervenciones) el 15/05/2015 00:41:53
Hola Jesús,

Muchísimas gracias por tu ayuda. Me has ayudado mucho porque estaba atascado. Así da gusto.

Un saludo y gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar