4f067c175d080aa7f0d5f10d304e430f2d91f50e
[IRC.git] / Robust / src / Benchmarks / Scheduling / Tracking / ImageY.java
1 public class ImageY {
2     flag toprocess;
3     flag tomergeY;
4     flag finish;
5     
6     /* current processing image related */
7     float[] m_image;
8     int m_rows;
9     int m_cols;
10     
11     /* results related */
12     float[] m_result;
13     int m_rows_rs;
14     int m_rows_re;
15     int m_cols_r;
16     
17     /* id indicating the piece # */
18     int m_id;  
19     int m_range;
20     
21     /* constructor */
22     public ImageY(int id,
23                   int range,
24                   float[] image,
25                   int rows,
26                   int cols) {
27       this.m_id = id;
28       this.m_range = range;
29       this.m_image = image;
30       this.m_rows = rows;
31       this.m_cols = cols;
32     }
33     
34     public int getId() {
35       return this.m_id;
36     }
37     
38     public int getRowsRS() {
39       return this.m_rows_rs;
40     }
41     
42     public int getRowsRE() {
43       return this.m_rows_re;
44     }
45
46     public int getColsR() {
47       return this.m_cols_r;
48     }
49     
50     public float[] getResult() {
51       return this.m_result;
52     }
53     
54     public int getRows() {
55       return this.m_rows;
56     }
57     
58     public int getCols() {
59       return this.m_cols;
60     }
61     
62     public float[] getImage() {
63       return this.m_image;
64     }
65     
66     public void calcSobel_dY() {
67       int rows_k1, cols_k1, rows_k2, cols_k2;
68       int[] kernel_1, kernel_2;
69       float temp;
70       int kernelSize, startCol, endCol, halfKernel, startRow, endRow;
71       int k, i, j, kernelSum_1, kernelSum_2;
72       float[] result, image;
73       int rows = this.m_rows;
74       int cols = this.m_cols;
75       
76       // level 1 is the base image.
77       
78       image = this.m_image;
79       
80       this.m_rows_rs = this.m_id * this.m_range;
81       this.m_rows_re = (this.m_id + 1) * this.m_range;
82       this.m_cols_r = cols;
83       result=this.m_result=new float[(this.m_rows_re-this.m_rows_rs)*this.m_cols_r];
84       
85       rows_k1 = 1;
86       cols_k1 = 3;
87       kernel_1 = new int[rows_k1 * cols_k1];
88       rows_k2 = 1;
89       cols_k2 = 3;
90       kernel_2 = new int[rows_k2 * cols_k2];
91
92       kernel_1[0] = 1;
93       kernel_1[1] = 0;
94       kernel_1[2] = -1;
95
96       kernelSize = 3;
97       kernelSum_1 = 2;
98       
99       kernel_2[0] = 1;
100       kernel_2[1] = 2;
101       kernel_2[2] = 1;
102
103       kernelSum_2 = 4;
104
105       startCol = 1;       //(kernelSize/2);
106       endCol = cols - 1;  //(int)(cols - (kernelSize/2));
107       halfKernel = 1;     //(kernelSize-1)/2;
108       
109       if((this.m_rows_re < 1) || (this.m_rows_rs > rows - 1)) {
110         return;
111       }
112       startRow = (1>this.m_rows_rs)?1:(this.m_rows_rs);       //(kernelSize)/2;
113       endRow = ((rows-1)<this.m_rows_re)?(rows-1):(this.m_rows_re);  //(rows - (kernelSize)/2);
114
115       int ii = startRow - this.m_rows_rs;
116       for(i=startRow; i<endRow; i++) {
117           for(j=startCol; j<endCol; j++) {
118               temp = 0;
119               for(k=-halfKernel; k<=halfKernel; k++) {
120                   temp += (float)(image[i * cols + (j+k)] 
121                                         * (float)(kernel_2[k+halfKernel]));
122               }
123               result[ii * cols + j] = (float)(temp/kernelSum_2);
124           }
125           ii++;
126       }
127     }
128 }