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