Libraryless. Click here for Pure Java version (6782L/42K).
1 | // integral image split in 2 vertical stripes so creation is 2-parallel |
2 | final sclass BWIntegralImage_twoParts implements MakesBufferedImage, IBWIntegralImage { |
3 | int w, h, th; |
4 | IBWIntegralImage top, bottom; |
5 | |
6 | *() {} |
7 | *(File f) { this(loadImage2(f)); } |
8 | |
9 | *(MakesBufferedImage img) { this(toBufferedImage(img)); } |
10 | |
11 | *(BufferedImage image) { |
12 | this(image, (img, idx) -> BWIntegralImage(img)); |
13 | } |
14 | |
15 | *(BufferedImage image, IF2<BufferedImage, Int, IBWIntegralImage> makeSubImage) { |
16 | this(null, image, makeSubImage); |
17 | } |
18 | |
19 | *(ThreadPoolExecutor executor, BufferedImage image, IF2<BufferedImage, Int, IBWIntegralImage> makeSubImage) ctex { |
20 | w = image.getWidth(); |
21 | h = image.getHeight(); |
22 | th = (h+1)/2; |
23 | L<IBWIntegralImage> l = parallelEval(executor, |
24 | () -> makeSubImage.get(virtualClipBufferedImage(image, 0, 0, w, th), 0), |
25 | () -> h <= th ? null : makeSubImage.get(virtualClipBufferedImage(image, 0, th, w, h-th), 1) |
26 | ); |
27 | top = first(l); |
28 | bottom = second(l); |
29 | } |
30 | |
31 | public int getIIValue(int x, int y) { |
32 | ret y < th ? top.getIIValue(x, y) |
33 | : top.getIIValue(x, th-1) + bottom.getIIValue(x, y-th); |
34 | } |
35 | |
36 | // optimization over default method |
37 | public int getPixelSum(int x1, int y1, int x2, int y2) { |
38 | if (y2 <= th) |
39 | ret top.getPixelSum(x1, y1, x2, y2); |
40 | if (y1 >= th) |
41 | ret bottom.getPixelSum(x1, y1-th, x2, y2-th); |
42 | |
43 | // rectangle straddles top and bottom stripe |
44 | //ret bwIntegralImage_sumRect(this, x1, y1, x2, y2); |
45 | int topLeft = top.getIIValue(x1-1, y1-1); |
46 | int topRight = top.getIIValue(x2-1, y1-1); |
47 | int mediumLeft = top.getIIValue(x1-1, th-1); |
48 | int mediumRight = top.getIIValue(x2-1, th-1); |
49 | int bottomLeft = bottom.getIIValue(x1-1, y2-th-1); |
50 | int bottomRight = bottom.getIIValue(x2-1, y2-th-1); |
51 | ret bottomRight-bottomLeft+mediumRight-mediumLeft+topLeft-topRight; |
52 | } |
53 | |
54 | public int getWidth() { ret w; } |
55 | public int getHeight() { ret h; } |
56 | } |
Began life as a copy of #1019595
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, vouqrxazstgt
No comments. add comment
Snippet ID: | #1030535 |
Snippet name: | BWIntegralImage_twoParts |
Eternal ID of this version: | #1030535/28 |
Text MD5: | 8deaef4c85b9b9f18141dd8655740077 |
Transpilation MD5: | 3ed531335193367e5fcd9e4ba1171367 |
Author: | stefan |
Category: | javax / imaging |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2021-01-07 03:04:17 |
Source code size: | 2017 bytes / 56 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 250 / 545 |
Version history: | 27 change(s) |
Referenced in: | [show references] |