Bug fixed in preprocessor for new primitives.
[Faustine.git] / architecture / morpho.lib
index 7d86d47..fc24c6a 100644 (file)
@@ -17,33 +17,51 @@ tri_mins(n) = par(i, n, tri_min);
 dilating(n) = strel_shift_dilation, _, strel_shift_dilation : #, _ : # : spray_by_three(n) : tri_maxs(n) : nconcat(n);
 eroding(n) = strel_shift_erosion, _, strel_shift_erosion : #, _ : # : spray_by_three(n) : tri_mins(n) : nconcat(n);
 
 dilating(n) = strel_shift_dilation, _, strel_shift_dilation : #, _ : # : spray_by_three(n) : tri_maxs(n) : nconcat(n);
 eroding(n) = strel_shift_erosion, _, strel_shift_erosion : #, _ : # : spray_by_three(n) : tri_mins(n) : nconcat(n);
 
-//dilation(size, iter) = seq(i, iter, dilating(size));
-//erosion(size, iter) = seq(i, iter, eroding(size));
+dilation_line(x, y) = serialize : dilating(x) : vectorize(y);
+erosion_line(x, y) = serialize : eroding(x) : vectorize(y);
 
 
-dilation_square(x, y) = serialize : dilating(x) : vectorize(y) : matrix_transpose(y, x) : serialize : dilating(y) : vectorize(x) : matrix_transpose(x, y);
+dilation_column(x, y) = matrix_transpose(y, x) : serialize : dilating(y) : vectorize(x) : matrix_transpose(x, y);
+erosion_column(x, y) = matrix_transpose(y, x) : serialize : eroding(y) : vectorize(x) : matrix_transpose(x, y);
 
 
-erosion_square(x, y) = serialize : eroding(x) : vectorize(y) : matrix_transpose(y, x) : serialize : eroding(y) : vectorize(x) : matrix_transpose(x, y);
+dilation_square(x, y) = dilation_line(x, y) : dilation_column(x, y);
+erosion_square(x, y) = erosion_line(x, y) : erosion_column(x, y);
 
 cross = _, _ <: !, _, _, !;
 
 
 cross = _, _ <: !, _, _, !;
 
-//dilations(x, y, iter) = seq(i, iter, dilation_square(x,y));
-//erosions(x, y, iter) = seq(i, iter, erosion_square(x,y));
+dilations_line(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_line(x, y))~_), (iter - 1)) : rdtable : serialize;
 
 
-dilations(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_square(x, y))~_), (iter - 1)) : rdtable : serialize;
-erosions(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_square(x, y))~_), (iter - 1)) : rdtable : serialize;
+erosions_line(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_line(x, y))~_), (iter - 1)) : rdtable : serialize;
 
 
-opening(x, y, iter) = erosions(x, y, iter) : dilations(x, y, iter);
-closing(x, y, iter) = dilations(x, y, iter) : erosions(x, y, iter);
+dilations_column(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_column(x, y))~_), (iter - 1)) : rdtable : serialize;
+
+erosions_column(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_column(x, y))~_), (iter - 1)) : rdtable : serialize;
+
+dilations_square(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_square(x, y))~_), (iter - 1)) : rdtable : serialize;
+
+erosions_square(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_square(x, y))~_), (iter - 1)) : rdtable : serialize;
+
+opening_line(x, y, iter) = erosions_line(x, y, iter) : dilations_line(x, y, iter);
+closing_line(x, y, iter) = dilations_line(x, y, iter) : erosions_line(x, y, iter);
+
+opening_column(x, y, iter) = erosions_column(x, y, iter) : dilations_column(x, y, iter);
+closing_column(x, y, iter) = dilations_column(x, y, iter) : erosions_column(x, y, iter);
+
+opening_square(x, y, iter) = erosions_square(x, y, iter) : dilations_square(x, y, iter);
+closing_square(x, y, iter) = dilations_square(x, y, iter) : erosions_square(x, y, iter);
 
 
-threshold(x, n) = _, (n : vectorize(x)) : >;
 and = *;
 and = *;
+threshold(x, low, high) = _ <: (_, (low : vectorize(x)) : >), (_, (high : vectorize(x)) : <) : and;
+
+//licenceplate(x, y) = _ <: (opening_line(x, y, 15), closing_line(x, y, 8) : threshold(x, 1, 50), threshold(x, 150, 255) : and : opening_column(x, y, 4) : opening_line(x, y, 4) : dilations_square(x, y, 2)), _ : and;
+
+licenceplate(x, y, o1, c2, t3, t4, t5, t6, o7, o8, d9) = _ <: (opening_line(x, y, o1), closing_line(x, y, c2) : threshold(x, t3, t4), threshold(x, t5, t6) : and : opening_column(x, y, o7) : opening_line(x, y, o8) : dilations_square(x, y, d9)), _ : and;
 
 
-licenceplate(x, y, seuil) = _ <: (opening(x, y, 1), closing(x, y, 1) : threshold(x, seuil), threshold(x, seuil) : and : opening(x, y, 1) : dilations(x, y, 1)), _ : and;
+//licenceplate(x, y) = _ <: (opening_line(x, y, 4), closing_line(x, y, 2) : threshold(x, 1, 50), threshold(x, 150, 255) : and : opening_column(x, y, 4) : opening_line(x, y, 4) : dilations_square(x, y, 4)), _ : and;
 
 
-//process = dilations(8, 8, 3);
+//process = dilations_line(8, 8, 3);
 //process = erosions(8, 8, 3);
 //process = open(8, 8, 2);
 //process = close(8, 8, 5);
 //process = erosions(8, 8, 3);
 //process = open(8, 8, 2);
 //process = close(8, 8, 5);
-//process = licenceplate(8, 8, 128);
+//process = licenceplate(100, 50, 15, 8, 1, 50, 150, 255, 4, 4, 2);