Preparacion_Muestras_Neuronas.m 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. clear all;
  2. %%
  3. clc
  4. % Leemos el archivo de Matlab conteniendo las neuronas
  5. Num_File = 6;
  6. load(['Neurona_Matlab_', num2str(Num_File), '.mat']);
  7. %% Ploteamos
  8. clc
  9. colores = {'r', 'b', 'm', 'k', 'g'};
  10. figure;
  11. hold on;
  12. for i = 1:length(AXON_Cell)
  13. Puntos_Axon = AXON_Cell{1, i};
  14. plot3( Puntos_Axon(:, 1), Puntos_Axon(:, 2), Puntos_Axon(:, 3), '-', 'color', colores{mod(i, 5)+1}, 'markersize', 10, 'linewidth', 1.5 );
  15. xlabel('X');
  16. ylabel('Y');
  17. zlabel('Z');
  18. % zlim([150 200]);
  19. % view([-96, -90]);
  20. % axis equal
  21. end
  22. %% Generamos cortes de en el plano xy
  23. clc
  24. % Preparamos la muestra en Z para que en ella quepa exactamente la rejilla de ancho "Grosor_C"
  25. Grosor_Corte = 50; % Espesor del corte = 50 micras
  26. sobra_Z = Grosor_Corte - mod( max( AXON(:, 4) ) - min( AXON(:, 4) ), Grosor_Corte );
  27. Max_Z = max( AXON(:, 4) ) + sobra_Z/2; % Coordenada máxima de z
  28. min_Z = min( AXON(:, 4) ) - sobra_Z/2; % Coordenada mínima de z
  29. Cortes = min_Z:Grosor_Corte:Max_Z - Grosor_Corte;
  30. % Preparamos la muestra en Y para que en ella quepa exactamente la rejilla de ancho "Rejilla_Y"
  31. Rejilla_Y = 100;
  32. sobra_Y = Rejilla_Y - mod( max( AXON(:, 3) ) - min( AXON(:, 3) ), Rejilla_Y );
  33. Max_Y = max( AXON(:, 3) ) + sobra_Y/2; % Coordenada máxima de z
  34. min_Y = min( AXON(:, 3) ) - sobra_Y/2; % Coordenada mínima de z
  35. Filas_Rejilla = min_Y:Rejilla_Y:Max_Y - Rejilla_Y;
  36. % Preparamos la muestra en X para que en ella quepa exactamente la rejilla de ancho "Rejilla_X":
  37. Rejilla_X = 100;
  38. sobra_X = Rejilla_X - mod( max( AXON(:, 2) ) - min( AXON(:, 2) ), Rejilla_X );
  39. Max_X = max( AXON(:, 2) ) + sobra_X/2; % Coordenada máxima de z
  40. min_X = min( AXON(:, 2) ) - sobra_X/2; % Coordenada mínima de z
  41. Columnas_Rejilla = min_X:Rejilla_X:Max_X - Rejilla_X;
  42. tic
  43. % Separamos la muestra en cortes en XY y en la rejilla:
  44. Cortes_XY_Axon = cell( length( Cortes ), 1 );
  45. for i = 1:length( Cortes ) % Recorremos los cortes
  46. dummy_CORTE = {};
  47. dummy_RAMA_en_REJILLA = cell( 1, length(AXON_Cell) );
  48. for j = 1:length(AXON_Cell)
  49. dummy_2 = AXON_Cell{1, j}; % Puntos en esa rama del axón y en ese corte
  50. ind_Corte = dummy_2(:, 3) > Cortes(i) & dummy_2(:, 3) < Cortes(i) + Grosor_Corte;
  51. if sum(ind_Corte) > 0 % En este corte hay puntos de esa rama
  52. dummy_REJILLA = cell( length(Filas_Rejilla), length(Columnas_Rejilla) ); % Esta celda tendrá NxM, con N y M el númeor de filas y columnas respect. de la rejilla en que se divide cada corte
  53. % Vemos en qué celda de la rejilla están:
  54. for filas = 1:length(Filas_Rejilla)
  55. ind_Rejilla_Y = dummy_2(:, 2) > Filas_Rejilla( filas ) & dummy_2(:, 2) < Filas_Rejilla( filas ) + Rejilla_Y;
  56. for columnas = 1:length( Columnas_Rejilla )
  57. ind_Rejilla_X = dummy_2(:, 1) > Columnas_Rejilla( columnas ) & dummy_2(:, 1) < Columnas_Rejilla( columnas ) + Rejilla_X;
  58. Rama_en_Rejilla = dummy_2( ind_Corte & ind_Rejilla_X & ind_Rejilla_Y, : ); % Puntos de esa rama que están en esa celda de la rejilla
  59. dummy_REJILLA{filas, columnas} = Rama_en_Rejilla;
  60. end
  61. end
  62. dummy_RAMA_en_REJILLA{1, j} = dummy_REJILLA; % Cada celda contiene NxM celdas, codificando la presencia de cada rama correspondiente en la rejilla. Las que no tienen NxM es que están vacías porque sus ramas no están en ese corte
  63. end
  64. end
  65. Cortes_XY_Axon{i, 1} = dummy_RAMA_en_REJILLA;
  66. disp(i)
  67. end
  68. toc
  69. %% Salvamos los datos:
  70. save(['Cortes_Muestra_Axon_', num2str(Num_File), '.mat']);
  71. %% Comprobamos que está bien ploteando:
  72. clc
  73. i_x = 16; % Columna de la rejilla
  74. i_y = 14; % Fila de la rejilla
  75. i_z = 14; % Corte
  76. colores = {'r', 'b', 'm', 'k', 'g'};
  77. figure('color', 'w', 'position', [50, 200, 1300, 500]);
  78. subplot(1, 2, 1);
  79. hold on;
  80. for i = 1:length(AXON_Cell)
  81. Puntos_Axon = AXON_Cell{1, i};
  82. plot3( Puntos_Axon(:, 1), Puntos_Axon(:, 2), Puntos_Axon(:, 3), '-o', 'color', colores{mod(i, 5)+1}, 'markersize', 7, 'linewidth', 1.5 );
  83. xlim([Columnas_Rejilla(i_x), Columnas_Rejilla(i_x) + Rejilla_X]);
  84. ylim([Filas_Rejilla(i_y), Filas_Rejilla(i_y) + Rejilla_Y]);
  85. zlim([Cortes(i_z), Cortes(i_z) + Grosor_Corte]);
  86. view([32, 20]);
  87. % axis equal
  88. end
  89. subplot(1, 2, 2);
  90. hold on
  91. for i = 1:length(Cortes_XY_Axon{i_z, 1})
  92. if ~isempty( Cortes_XY_Axon{i_z, 1}{1, i} )
  93. dummy = Cortes_XY_Axon{i_z, 1}{1, i};
  94. for i_fila = 1:size(dummy, 1)
  95. for i_columna = 1:size(dummy, 2)
  96. if ~isempty(dummy{i_fila, i_columna})
  97. Puntos_Axon = dummy{i_fila, i_columna};
  98. plot3( Puntos_Axon(:, 1), Puntos_Axon(:, 2), Puntos_Axon(:, 3), '-o', 'color', colores{mod(i, 5)+1}, 'markersize', 7, 'linewidth', 1.5 );
  99. end
  100. end
  101. end
  102. end
  103. xlim([Columnas_Rejilla(i_x), Columnas_Rejilla(i_x) + Rejilla_X]);
  104. ylim([Filas_Rejilla(i_y), Filas_Rejilla(i_y) + Rejilla_Y]);
  105. zlim([Cortes(i_z), Cortes(i_z) + Grosor_Corte]);
  106. view([32, 20]);
  107. % axis equal
  108. end