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 }