Skip to content

用java实现了一种流处理版本的二维图像窗口遍历算法,基于FIFO读取输入数据流,并实时计算局部窗口数据。可用于sobel滤波,高斯滤波,上下采样等图像处理。

License

Notifications You must be signed in to change notification settings

DLX4/stream-convolution

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

输入数据:

data=
0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  
15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  
30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  
45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  
60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  
75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  
90  91  92  93  94  95  96  97  98  99  100 101 102 103 104 
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 

窗口滑动边界处理,起始行(行缓存初始化)

当前行缓存:
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   null null 
null null null null null null null null null null null null null null null null null 

当前窗口缓存:
null null null null null 
null null null null null 
null null null null null 
null null null null null 
null null null null null

窗口滑动边界处理,起始行1

当前行缓存:
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   null null 
[30] null null null null null null null null null null null null null null null null 

当前窗口缓存:
null null null null 0    
null null null null 0    
null null null null 0    
null null null null 15   
null null null null 30  

注意:此窗口数据不用于计算
// 输出结果到流
if (curCol >= halfWinSize) {
	dst.write(outputValue);
}

窗口滑动边界处理,起始行2

当前行缓存:
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   null null 
30  [31]  null null null null null null null null null null null null null null null 

当前窗口缓存:
0    0    0    0    1    
0    0    0    0    1    
0    0    0    0    1    
15   15   15   15   16   
30   30   30   30   31   

注意:此窗口数据不用于计算
// 输出结果到流
if (curCol >= halfWinSize) {
	dst.write(outputValue);
}

窗口滑动边界处理,起始行3

当前行缓存:
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   null null 
30   31  [32]  null null null null null null null null null null null null null null 

当前窗口缓存:
0    0    0    1    2    
0    0    0    1    2    
0    0    0    1    2    
15   15   15   16   17   
30   30   30   31   32  

窗口滑动边界处理,起始行4

当前行缓存:
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   null null 
30   31   32  [33]  null null null null null null null null null null null null null 

当前窗口缓存:
0    0    1    2    3    
0    0    1    2    3    
0    0    1    2    3    
15   15   16   17   18   
30   30   31   32   33  

窗口滑动边界处理,起始行7

当前行缓存:
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   null null 
30   31   32   33   34   35  [36]  null null null null null null null null null null 

当前窗口缓存:
2    3    4    5    6    
2    3    4    5    6    
2    3    4    5    6    
17   18   19   20   21   
32   33   34   35   36 

窗口滑动边界处理(边缘列1)

当前行缓存:
30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   0    0    
45   46   47   48   49   50   51   52   53   54   55   56   57   58   59   0    0    
60   61   62   63   64   65   66   67   68   69   70   71   72   73   74   0    0    
75   76   77   78   79   80   81   82   83   84   85   86   87   88   89   0    0    
90   91   92   93   94   95   96   97   98   99   100  101  102  103  104 [0]   null 

当前窗口缓存:
41   42   43   44   44   
56   57   58   59   59   
71   72   73   74   74   
86   87   88   89   89   
101  102  103  104  104  

窗口滑动边界处理(边缘列2)

当前行缓存:
30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   0    0    
45   46   47   48   49   50   51   52   53   54   55   56   57   58   59   0    0    
60   61   62   63   64   65   66   67   68   69   70   71   72   73   74   0    0    
75   76   77   78   79   80   81   82   83   84   85   86   87   88   89   0    0    
90   91   92   93   94   95   96   97   98   99   100  101  102  103  104  0   [0]    

当前窗口缓存:
42   43   44   44   44   
57   58   59   59   59   
72   73   74   74   74   
87   88   89   89   89   
102  103  104  104  104  

窗口滑动换行

当前行缓存:
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   null null 
30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   0    0    
[45] 1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 

当前窗口缓存:
13   14   14   14   0    
13   14   14   14   0    
13   14   14   14   15   
28   29   29   29   30   
43   44   44   44   45  

注意:此窗口数据不用于计算
// 输出结果到流
if (curCol >= halfWinSize) {
	dst.write(outputValue);
}

窗口滑动换行

当前行缓存:
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   null null 
15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   null null 
30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   0    0    
45  [46]  2    3    4    5    6    7    8    9    10   11   12   13   14   null null 

当前窗口缓存:
0    0    0    0    1    
0    0    0    0    1    
15   15   15   15   16   
30   30   30   30   31   
45   45   45   45   46   

窗口滑动边界处理(末尾行)

当前行缓存:
240  241  242  243  244  245  246  247  248  249  250  251  252  253  254  0    0    
255  256  257  258  259  260  261  262  263  264  265  266  267  268  269  0    0    
270  271  272  273  274  275  276  277  278  279  280  281  282  283  284  0    0    
285  286  287  288  289  290  291  292  293  294  295  296  297  298  299  0    0    
[0]  226  227  228  229  230  231  232  233  234  235  236  237  238  239  0    0    

当前窗口缓存:
238  239  239  239  240  
253  254  254  254  255  
268  269  269  269  270  
283  284  284  284  285  
298  299  299  299  285  

窗口滑动边界处理(末尾行)

当前行缓存:
240  241  242  243  244  245  246  247  248  249  250  251  252  253  254  0    0    
255  256  257  258  259  260  261  262  263  264  265  266  267  268  269  0    0    
270  271  272  273  274  275  276  277  278  279  280  281  282  283  284  0    0    
285  286  287  288  289  290  291  292  293  294  295  296  297  298  299  0    0    
0    [0]  227  228  229  230  231  232  233  234  235  236  237  238  239  0    0    

当前窗口缓存:
240  240  240  240  241  
255  255  255  255  256  
270  270  270  270  271  
285  285  285  285  286  
285  285  285  285  286 

About

用java实现了一种流处理版本的二维图像窗口遍历算法,基于FIFO读取输入数据流,并实时计算局部窗口数据。可用于sobel滤波,高斯滤波,上下采样等图像处理。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages