1 module rip.processing.filters.linear;
2 
3 // Предок всех сверточных фильтров
4 abstract class LinearFilter
5 {
6 	protected
7 	{
8 		float[] flattenKernel;
9 		float apertureWidth, apertureHeight, apertureDivider, apertureOffset;
10 	}
11 
12 
13 	@property
14 	{
15 		float getWidth()
16 		{
17 			return apertureWidth;
18 		}
19 
20 
21 		float getHeight()
22 		{
23 			return apertureWidth;
24 		}
25 
26 
27 		float getDivider()
28 		{
29 			return apertureDivider;
30 		}
31 
32 
33 		float getOffset()
34 		{
35 			return apertureOffset;
36 		}
37 
38 
39 		float[] getKernel()
40 		{
41 			return flattenKernel;
42 		}
43 	}
44 }
45 
46 
47 // Преобразование двумерного массива в плоский одномерный
48 T[] flatten(T)(T[][] dataArray)
49 {
50 	T[] intermediateArray;
51 
52 	foreach (i; 0 .. dataArray.length)
53 	{
54 		foreach (j; 0 .. dataArray[i].length)
55 		{
56 			intermediateArray ~= dataArray[i][j];
57 		}
58 	}
59 
60 	return intermediateArray;
61 }