Transpiled version (5936L) is out of date.
1 | sinterface IIntegralImage extends MakesBufferedImage {
|
2 | public int getWidth(); |
3 | public int getHeight(); |
4 | default public Pt getSize() { ret pt(getWidth(), getHeight()); }
|
5 | |
6 | default public int defaultChannel() { ret 0; }
|
7 | default public int nChannels() { ret 3; }
|
8 | |
9 | // get value for 1 channel |
10 | // normal range [0; pixelCount*256) |
11 | public double getIntegralValue(int x, int y, int channel); |
12 | |
13 | default double getIntegralValue(double x, double y, int channel) {
|
14 | ret getIntegralValue(ifloor(x), ifloor(y), channel); |
15 | } |
16 | |
17 | // gets summed value of the 3 channels |
18 | // normal range [0; pixelCount*256*3) |
19 | default double getIntegralValue(int x, int y) {
|
20 | ret getIntegralValue(x, y, 0) |
21 | + getIntegralValue(x, y, 1) |
22 | + getIntegralValue(x, y, 2); |
23 | } |
24 | |
25 | default double rectSum(int x1, int y1, int x2, int y2, int channel) {
|
26 | double bottomLeft = getIntegralValue(x1-1, y2-1, channel); |
27 | double bottomRight = getIntegralValue(x2-1, y2-1, channel); |
28 | double topLeft = getIntegralValue(x1-1, y1-1, channel); |
29 | double topRight = getIntegralValue(x2-1, y1-1, channel); |
30 | ret bottomRight+topLeft-topRight-bottomLeft; |
31 | } |
32 | |
33 | default double rectSum(double x1, double y1, double x2, double y2, int channel) {
|
34 | double bottomLeft = getIntegralValue(x1-1, y2-1, channel); |
35 | double bottomRight = getIntegralValue(x2-1, y2-1, channel); |
36 | double topLeft = getIntegralValue(x1-1, y1-1, channel); |
37 | double topRight = getIntegralValue(x2-1, y1-1, channel); |
38 | ret bottomRight+topLeft-topRight-bottomLeft; |
39 | } |
40 | |
41 | default double rectSum(int x1, int y1, int x2, int y2) {
|
42 | double bottomLeft = getIntegralValue(x1-1, y2-1); |
43 | double bottomRight = getIntegralValue(x2-1, y2-1); |
44 | double topLeft = getIntegralValue(x1-1, y1-1); |
45 | double topRight = getIntegralValue(x2-1, y1-1); |
46 | ret bottomRight+topLeft-topRight-bottomLeft; |
47 | } |
48 | |
49 | default double rectAverage(int x1, int y1, int x2, int y2, int channel) {
|
50 | ret doubleRatio(rectSum(x1, y1, x2, y2, channel), areaFromPoints(x1, y1, x2, y2)); |
51 | } |
52 | |
53 | default double rectAverage(Rect r, int channel) {
|
54 | ret doubleRatio(rectSum(r, channel), rectArea(r)); |
55 | } |
56 | |
57 | default double rectSum(Rect r) {
|
58 | ret rectSum(r.x, r.y, r.x2(), r.y2()); |
59 | } |
60 | |
61 | default double rectSum(Rect r, int channel) {
|
62 | ret rectSum(r.x, r.y, r.x2(), r.y2(), channel); |
63 | } |
64 | |
65 | default double pixelSum(DoubleRect r) {
|
66 | ret rectSum(toRect_floor(r), defaultChannel()); |
67 | } |
68 | |
69 | default IIntegralImage clip(int x, int y, int w, int h) {
|
70 | ret IIVirtualClip(this, x, y, w, h); |
71 | } |
72 | |
73 | default double averageBrightness() {
|
74 | int w = getWidth(), h = getHeight(); |
75 | ret doubleRatio(getIntegralValue(w-1, h-1), w*h*3*255.0); |
76 | } |
77 | |
78 | default RGB averageRGB() {
|
79 | int w = getWidth(), h = getHeight(); |
80 | double factor = 1/(255.0*(w*h)); |
81 | ret RGB( |
82 | rectSum(0, 0, w, h, 0)*factor, |
83 | rectSum(0, 0, w, h, 1)*factor, |
84 | rectSum(0, 0, w, h, 2)*factor); |
85 | } |
86 | |
87 | // normal range: (0, 255) |
88 | default double getPixel(int x, int y, int channel) {
|
89 | ret rectSum(x, y, x+1, y+1, channel); |
90 | } |
91 | |
92 | // returns RGB pixel without alpha |
93 | default int getPixel(int x, int y) {
|
94 | int r = iround(rectSum(x, y, x+1, y+1, 0)); |
95 | int g = iround(rectSum(x, y, x+1, y+1, 1)); |
96 | int b = iround(rectSum(x, y, x+1, y+1, 2)); |
97 | ret rgbInt(r, g, b); |
98 | } |
99 | |
100 | default int nPixels() { ret getWidth()*getHeight(); }
|
101 | |
102 | default BufferedImage getBufferedImage() {
|
103 | int w = getWidth(), h = getHeight(); |
104 | int[] pixels = new[w*h]; |
105 | int i = 0; |
106 | for y to h: |
107 | for x to w: |
108 | pixels[i++] = getPixel(x, y) | fullAlphaMask(); |
109 | ret intArrayToBufferedImage(pixels, w, h); |
110 | } |
111 | |
112 | // minimum and maximum brightness possible in image |
113 | // Better not to use because without this information |
114 | // you have a more general recognition algorithm. |
115 | //default DoubleRange colorRange(int channel) { ret doubleRange(0, 256); }
|
116 | } |
Began life as a copy of #1027205
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx
No comments. add comment
| Snippet ID: | #1031920 |
| Snippet name: | IIntegralImage - interface for RGB integral image |
| Eternal ID of this version: | #1031920/38 |
| Text MD5: | 327b3cc64aeaae3ff94df0252d32a682 |
| Author: | stefan |
| Category: | javax / image recognition |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2022-03-13 01:48:03 |
| Source code size: | 4038 bytes / 116 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 522 / 862 |
| Version history: | 37 change(s) |
| Referenced in: | [show references] |