mirror of
https://github.com/eddyem/bta-image-model.git
synced 2026-03-20 08:40:59 +03:00
copy
This commit is contained in:
17
mask/README.fmt
Normal file
17
mask/README.fmt
Normal file
@@ -0,0 +1,17 @@
|
||||
JSON format:
|
||||
|
||||
global object MUST consist field "Z" or "maskz" with Z-coordinate of mask
|
||||
|
||||
it CAN contain global fields (common to all holes) such as in holes array
|
||||
its field bbox (if exists) HAVE TO BE GLOBAL convex bbox of all holes!
|
||||
|
||||
it MUST contain at least one hole object (or hole array)
|
||||
|
||||
fields of "hole":
|
||||
"shape" - shape of hole (could be "square" and "round" or "ellipse")
|
||||
"radius" - scalar or array[2] with radius parameter
|
||||
"center" - array[2] with coordinates of hole's center
|
||||
"bbox" - array[4] with bounding box of a hole
|
||||
|
||||
independently from shape any hole can consist both fields "radius" and "center" or single field "bbox"
|
||||
|
||||
264
mask/holes.json
Normal file
264
mask/holes.json
Normal file
@@ -0,0 +1,264 @@
|
||||
{
|
||||
"maskz": 20.0,
|
||||
"shape": "round", "radius": 0.007500,
|
||||
"holes": [
|
||||
{ "ring": 0, "number": 0, "center": [ 0.1742, 0.0172 ] },
|
||||
{ "ring": 0, "number": 1, "center": [ 0.1675, 0.0508 ] },
|
||||
{ "ring": 0, "number": 2, "center": [ 0.1543, 0.0825 ] },
|
||||
{ "ring": 0, "number": 3, "center": [ 0.1353, 0.1110 ] },
|
||||
{ "ring": 0, "number": 4, "center": [ 0.1110, 0.1353 ] },
|
||||
{ "ring": 0, "number": 5, "center": [ 0.0825, 0.1543 ] },
|
||||
{ "ring": 0, "number": 6, "center": [ 0.0508, 0.1675 ] },
|
||||
{ "ring": 0, "number": 7, "center": [ 0.0172, 0.1742 ] },
|
||||
{ "ring": 0, "number": 8, "center": [ -0.0172, 0.1742 ] },
|
||||
{ "ring": 0, "number": 9, "center": [ -0.0508, 0.1675 ] },
|
||||
{ "ring": 0, "number": 10, "center": [ -0.0825, 0.1543 ] },
|
||||
{ "ring": 0, "number": 11, "center": [ -0.1110, 0.1353 ] },
|
||||
{ "ring": 0, "number": 12, "center": [ -0.1353, 0.1110 ] },
|
||||
{ "ring": 0, "number": 13, "center": [ -0.1543, 0.0825 ] },
|
||||
{ "ring": 0, "number": 14, "center": [ -0.1675, 0.0508 ] },
|
||||
{ "ring": 0, "number": 15, "center": [ -0.1742, 0.0172 ] },
|
||||
{ "ring": 0, "number": 16, "center": [ -0.1742, -0.0172 ] },
|
||||
{ "ring": 0, "number": 17, "center": [ -0.1675, -0.0508 ] },
|
||||
{ "ring": 0, "number": 18, "center": [ -0.1543, -0.0825 ] },
|
||||
{ "ring": 0, "number": 19, "center": [ -0.1353, -0.1110 ] },
|
||||
{ "ring": 0, "number": 20, "center": [ -0.1110, -0.1353 ] },
|
||||
{ "ring": 0, "number": 21, "center": [ -0.0825, -0.1543 ] },
|
||||
{ "ring": 0, "number": 22, "center": [ -0.0508, -0.1675 ] },
|
||||
{ "ring": 0, "number": 23, "center": [ -0.0172, -0.1742 ] },
|
||||
{ "ring": 0, "number": 24, "center": [ 0.0172, -0.1742 ] },
|
||||
{ "ring": 0, "number": 25, "center": [ 0.0508, -0.1675 ] },
|
||||
{ "ring": 0, "number": 26, "center": [ 0.0825, -0.1543 ] },
|
||||
{ "ring": 0, "number": 27, "center": [ 0.1110, -0.1353 ] },
|
||||
{ "ring": 0, "number": 28, "center": [ 0.1353, -0.1110 ] },
|
||||
{ "ring": 0, "number": 29, "center": [ 0.1543, -0.0825 ] },
|
||||
{ "ring": 0, "number": 30, "center": [ 0.1675, -0.0508 ] },
|
||||
{ "ring": 0, "number": 31, "center": [ 0.1742, -0.0172 ] },
|
||||
{ "ring": 1, "number": 0, "center": [ 0.2458, 0.0242 ] },
|
||||
{ "ring": 1, "number": 1, "center": [ 0.2364, 0.0717 ] },
|
||||
{ "ring": 1, "number": 2, "center": [ 0.2178, 0.1164 ] },
|
||||
{ "ring": 1, "number": 3, "center": [ 0.1909, 0.1567 ] },
|
||||
{ "ring": 1, "number": 4, "center": [ 0.1567, 0.1909 ] },
|
||||
{ "ring": 1, "number": 5, "center": [ 0.1164, 0.2178 ] },
|
||||
{ "ring": 1, "number": 6, "center": [ 0.0717, 0.2364 ] },
|
||||
{ "ring": 1, "number": 7, "center": [ 0.0242, 0.2458 ] },
|
||||
{ "ring": 1, "number": 8, "center": [ -0.0242, 0.2458 ] },
|
||||
{ "ring": 1, "number": 9, "center": [ -0.0717, 0.2364 ] },
|
||||
{ "ring": 1, "number": 10, "center": [ -0.1164, 0.2178 ] },
|
||||
{ "ring": 1, "number": 11, "center": [ -0.1567, 0.1909 ] },
|
||||
{ "ring": 1, "number": 12, "center": [ -0.1909, 0.1567 ] },
|
||||
{ "ring": 1, "number": 13, "center": [ -0.2178, 0.1164 ] },
|
||||
{ "ring": 1, "number": 14, "center": [ -0.2364, 0.0717 ] },
|
||||
{ "ring": 1, "number": 15, "center": [ -0.2458, 0.0242 ] },
|
||||
{ "ring": 1, "number": 16, "center": [ -0.2458, -0.0242 ] },
|
||||
{ "ring": 1, "number": 17, "center": [ -0.2364, -0.0717 ] },
|
||||
{ "ring": 1, "number": 18, "center": [ -0.2178, -0.1164 ] },
|
||||
{ "ring": 1, "number": 19, "center": [ -0.1909, -0.1567 ] },
|
||||
{ "ring": 1, "number": 20, "center": [ -0.1567, -0.1909 ] },
|
||||
{ "ring": 1, "number": 21, "center": [ -0.1164, -0.2178 ] },
|
||||
{ "ring": 1, "number": 22, "center": [ -0.0717, -0.2364 ] },
|
||||
{ "ring": 1, "number": 23, "center": [ -0.0242, -0.2458 ] },
|
||||
{ "ring": 1, "number": 24, "center": [ 0.0242, -0.2458 ] },
|
||||
{ "ring": 1, "number": 25, "center": [ 0.0717, -0.2364 ] },
|
||||
{ "ring": 1, "number": 26, "center": [ 0.1164, -0.2178 ] },
|
||||
{ "ring": 1, "number": 27, "center": [ 0.1567, -0.1909 ] },
|
||||
{ "ring": 1, "number": 28, "center": [ 0.1909, -0.1567 ] },
|
||||
{ "ring": 1, "number": 29, "center": [ 0.2178, -0.1164 ] },
|
||||
{ "ring": 1, "number": 30, "center": [ 0.2364, -0.0717 ] },
|
||||
{ "ring": 1, "number": 31, "center": [ 0.2458, -0.0242 ] },
|
||||
{ "ring": 2, "number": 0, "center": [ 0.2936, 0.0289 ] },
|
||||
{ "ring": 2, "number": 1, "center": [ 0.2823, 0.0856 ] },
|
||||
{ "ring": 2, "number": 2, "center": [ 0.2602, 0.1391 ] },
|
||||
{ "ring": 2, "number": 3, "center": [ 0.2280, 0.1871 ] },
|
||||
{ "ring": 2, "number": 4, "center": [ 0.1871, 0.2280 ] },
|
||||
{ "ring": 2, "number": 5, "center": [ 0.1391, 0.2602 ] },
|
||||
{ "ring": 2, "number": 6, "center": [ 0.0856, 0.2823 ] },
|
||||
{ "ring": 2, "number": 7, "center": [ 0.0289, 0.2936 ] },
|
||||
{ "ring": 2, "number": 8, "center": [ -0.0289, 0.2936 ] },
|
||||
{ "ring": 2, "number": 9, "center": [ -0.0856, 0.2823 ] },
|
||||
{ "ring": 2, "number": 10, "center": [ -0.1391, 0.2602 ] },
|
||||
{ "ring": 2, "number": 11, "center": [ -0.1871, 0.2280 ] },
|
||||
{ "ring": 2, "number": 12, "center": [ -0.2280, 0.1871 ] },
|
||||
{ "ring": 2, "number": 13, "center": [ -0.2602, 0.1391 ] },
|
||||
{ "ring": 2, "number": 14, "center": [ -0.2823, 0.0856 ] },
|
||||
{ "ring": 2, "number": 15, "center": [ -0.2936, 0.0289 ] },
|
||||
{ "ring": 2, "number": 16, "center": [ -0.2936, -0.0289 ] },
|
||||
{ "ring": 2, "number": 17, "center": [ -0.2823, -0.0856 ] },
|
||||
{ "ring": 2, "number": 18, "center": [ -0.2602, -0.1391 ] },
|
||||
{ "ring": 2, "number": 19, "center": [ -0.2280, -0.1871 ] },
|
||||
{ "ring": 2, "number": 20, "center": [ -0.1871, -0.2280 ] },
|
||||
{ "ring": 2, "number": 21, "center": [ -0.1391, -0.2602 ] },
|
||||
{ "ring": 2, "number": 22, "center": [ -0.0856, -0.2823 ] },
|
||||
{ "ring": 2, "number": 23, "center": [ -0.0289, -0.2936 ] },
|
||||
{ "ring": 2, "number": 24, "center": [ 0.0289, -0.2936 ] },
|
||||
{ "ring": 2, "number": 25, "center": [ 0.0856, -0.2823 ] },
|
||||
{ "ring": 2, "number": 26, "center": [ 0.1391, -0.2602 ] },
|
||||
{ "ring": 2, "number": 27, "center": [ 0.1871, -0.2280 ] },
|
||||
{ "ring": 2, "number": 28, "center": [ 0.2280, -0.1871 ] },
|
||||
{ "ring": 2, "number": 29, "center": [ 0.2602, -0.1391 ] },
|
||||
{ "ring": 2, "number": 30, "center": [ 0.2823, -0.0856 ] },
|
||||
{ "ring": 2, "number": 31, "center": [ 0.2936, -0.0289 ] },
|
||||
{ "ring": 3, "number": 0, "center": [ 0.3384, 0.0333 ] },
|
||||
{ "ring": 3, "number": 1, "center": [ 0.3254, 0.0987 ] },
|
||||
{ "ring": 3, "number": 2, "center": [ 0.2999, 0.1603 ] },
|
||||
{ "ring": 3, "number": 3, "center": [ 0.2628, 0.2157 ] },
|
||||
{ "ring": 3, "number": 4, "center": [ 0.2157, 0.2628 ] },
|
||||
{ "ring": 3, "number": 5, "center": [ 0.1603, 0.2999 ] },
|
||||
{ "ring": 3, "number": 6, "center": [ 0.0987, 0.3254 ] },
|
||||
{ "ring": 3, "number": 7, "center": [ 0.0333, 0.3384 ] },
|
||||
{ "ring": 3, "number": 8, "center": [ -0.0333, 0.3384 ] },
|
||||
{ "ring": 3, "number": 9, "center": [ -0.0987, 0.3254 ] },
|
||||
{ "ring": 3, "number": 10, "center": [ -0.1603, 0.2999 ] },
|
||||
{ "ring": 3, "number": 11, "center": [ -0.2157, 0.2628 ] },
|
||||
{ "ring": 3, "number": 12, "center": [ -0.2628, 0.2157 ] },
|
||||
{ "ring": 3, "number": 13, "center": [ -0.2999, 0.1603 ] },
|
||||
{ "ring": 3, "number": 14, "center": [ -0.3254, 0.0987 ] },
|
||||
{ "ring": 3, "number": 15, "center": [ -0.3384, 0.0333 ] },
|
||||
{ "ring": 3, "number": 16, "center": [ -0.3384, -0.0333 ] },
|
||||
{ "ring": 3, "number": 17, "center": [ -0.3254, -0.0987 ] },
|
||||
{ "ring": 3, "number": 18, "center": [ -0.2999, -0.1603 ] },
|
||||
{ "ring": 3, "number": 19, "center": [ -0.2628, -0.2157 ] },
|
||||
{ "ring": 3, "number": 20, "center": [ -0.2157, -0.2628 ] },
|
||||
{ "ring": 3, "number": 21, "center": [ -0.1603, -0.2999 ] },
|
||||
{ "ring": 3, "number": 22, "center": [ -0.0987, -0.3254 ] },
|
||||
{ "ring": 3, "number": 23, "center": [ -0.0333, -0.3384 ] },
|
||||
{ "ring": 3, "number": 24, "center": [ 0.0333, -0.3384 ] },
|
||||
{ "ring": 3, "number": 25, "center": [ 0.0987, -0.3254 ] },
|
||||
{ "ring": 3, "number": 26, "center": [ 0.1603, -0.2999 ] },
|
||||
{ "ring": 3, "number": 27, "center": [ 0.2157, -0.2628 ] },
|
||||
{ "ring": 3, "number": 28, "center": [ 0.2628, -0.2157 ] },
|
||||
{ "ring": 3, "number": 29, "center": [ 0.2999, -0.1603 ] },
|
||||
{ "ring": 3, "number": 30, "center": [ 0.3254, -0.0987 ] },
|
||||
{ "ring": 3, "number": 31, "center": [ 0.3384, -0.0333 ] },
|
||||
{ "ring": 4, "number": 0, "center": [ 0.3772, 0.0371 ] },
|
||||
{ "ring": 4, "number": 1, "center": [ 0.3627, 0.1100 ] },
|
||||
{ "ring": 4, "number": 2, "center": [ 0.3342, 0.1787 ] },
|
||||
{ "ring": 4, "number": 3, "center": [ 0.2930, 0.2404 ] },
|
||||
{ "ring": 4, "number": 4, "center": [ 0.2404, 0.2930 ] },
|
||||
{ "ring": 4, "number": 5, "center": [ 0.1787, 0.3342 ] },
|
||||
{ "ring": 4, "number": 6, "center": [ 0.1100, 0.3627 ] },
|
||||
{ "ring": 4, "number": 7, "center": [ 0.0371, 0.3772 ] },
|
||||
{ "ring": 4, "number": 8, "center": [ -0.0371, 0.3772 ] },
|
||||
{ "ring": 4, "number": 9, "center": [ -0.1100, 0.3627 ] },
|
||||
{ "ring": 4, "number": 10, "center": [ -0.1787, 0.3342 ] },
|
||||
{ "ring": 4, "number": 11, "center": [ -0.2404, 0.2930 ] },
|
||||
{ "ring": 4, "number": 12, "center": [ -0.2930, 0.2404 ] },
|
||||
{ "ring": 4, "number": 13, "center": [ -0.3342, 0.1787 ] },
|
||||
{ "ring": 4, "number": 14, "center": [ -0.3627, 0.1100 ] },
|
||||
{ "ring": 4, "number": 15, "center": [ -0.3772, 0.0371 ] },
|
||||
{ "ring": 4, "number": 16, "center": [ -0.3772, -0.0371 ] },
|
||||
{ "ring": 4, "number": 17, "center": [ -0.3627, -0.1100 ] },
|
||||
{ "ring": 4, "number": 18, "center": [ -0.3342, -0.1787 ] },
|
||||
{ "ring": 4, "number": 19, "center": [ -0.2930, -0.2404 ] },
|
||||
{ "ring": 4, "number": 20, "center": [ -0.2404, -0.2930 ] },
|
||||
{ "ring": 4, "number": 21, "center": [ -0.1787, -0.3342 ] },
|
||||
{ "ring": 4, "number": 22, "center": [ -0.1100, -0.3627 ] },
|
||||
{ "ring": 4, "number": 23, "center": [ -0.0371, -0.3772 ] },
|
||||
{ "ring": 4, "number": 24, "center": [ 0.0371, -0.3772 ] },
|
||||
{ "ring": 4, "number": 25, "center": [ 0.1100, -0.3627 ] },
|
||||
{ "ring": 4, "number": 26, "center": [ 0.1787, -0.3342 ] },
|
||||
{ "ring": 4, "number": 27, "center": [ 0.2404, -0.2930 ] },
|
||||
{ "ring": 4, "number": 28, "center": [ 0.2930, -0.2404 ] },
|
||||
{ "ring": 4, "number": 29, "center": [ 0.3342, -0.1787 ] },
|
||||
{ "ring": 4, "number": 30, "center": [ 0.3627, -0.1100 ] },
|
||||
{ "ring": 4, "number": 31, "center": [ 0.3772, -0.0371 ] },
|
||||
{ "ring": 5, "number": 0, "center": [ 0.4120, 0.0406 ] },
|
||||
{ "ring": 5, "number": 1, "center": [ 0.3962, 0.1202 ] },
|
||||
{ "ring": 5, "number": 2, "center": [ 0.3651, 0.1952 ] },
|
||||
{ "ring": 5, "number": 3, "center": [ 0.3200, 0.2626 ] },
|
||||
{ "ring": 5, "number": 4, "center": [ 0.2626, 0.3200 ] },
|
||||
{ "ring": 5, "number": 5, "center": [ 0.1952, 0.3651 ] },
|
||||
{ "ring": 5, "number": 6, "center": [ 0.1202, 0.3962 ] },
|
||||
{ "ring": 5, "number": 7, "center": [ 0.0406, 0.4120 ] },
|
||||
{ "ring": 5, "number": 8, "center": [ -0.0406, 0.4120 ] },
|
||||
{ "ring": 5, "number": 9, "center": [ -0.1202, 0.3962 ] },
|
||||
{ "ring": 5, "number": 10, "center": [ -0.1952, 0.3651 ] },
|
||||
{ "ring": 5, "number": 11, "center": [ -0.2626, 0.3200 ] },
|
||||
{ "ring": 5, "number": 12, "center": [ -0.3200, 0.2626 ] },
|
||||
{ "ring": 5, "number": 13, "center": [ -0.3651, 0.1952 ] },
|
||||
{ "ring": 5, "number": 14, "center": [ -0.3962, 0.1202 ] },
|
||||
{ "ring": 5, "number": 15, "center": [ -0.4120, 0.0406 ] },
|
||||
{ "ring": 5, "number": 16, "center": [ -0.4120, -0.0406 ] },
|
||||
{ "ring": 5, "number": 17, "center": [ -0.3962, -0.1202 ] },
|
||||
{ "ring": 5, "number": 18, "center": [ -0.3651, -0.1952 ] },
|
||||
{ "ring": 5, "number": 19, "center": [ -0.3200, -0.2626 ] },
|
||||
{ "ring": 5, "number": 20, "center": [ -0.2626, -0.3200 ] },
|
||||
{ "ring": 5, "number": 21, "center": [ -0.1952, -0.3651 ] },
|
||||
{ "ring": 5, "number": 22, "center": [ -0.1202, -0.3962 ] },
|
||||
{ "ring": 5, "number": 23, "center": [ -0.0406, -0.4120 ] },
|
||||
{ "ring": 5, "number": 24, "center": [ 0.0406, -0.4120 ] },
|
||||
{ "ring": 5, "number": 25, "center": [ 0.1202, -0.3962 ] },
|
||||
{ "ring": 5, "number": 26, "center": [ 0.1952, -0.3651 ] },
|
||||
{ "ring": 5, "number": 27, "center": [ 0.2626, -0.3200 ] },
|
||||
{ "ring": 5, "number": 28, "center": [ 0.3200, -0.2626 ] },
|
||||
{ "ring": 5, "number": 29, "center": [ 0.3651, -0.1952 ] },
|
||||
{ "ring": 5, "number": 30, "center": [ 0.3962, -0.1202 ] },
|
||||
{ "ring": 5, "number": 31, "center": [ 0.4120, -0.0406 ] },
|
||||
{ "ring": 6, "number": 0, "center": [ 0.4458, 0.0439 ] },
|
||||
{ "ring": 6, "number": 1, "center": [ 0.4287, 0.1300 ] },
|
||||
{ "ring": 6, "number": 2, "center": [ 0.3951, 0.2112 ] },
|
||||
{ "ring": 6, "number": 3, "center": [ 0.3463, 0.2842 ] },
|
||||
{ "ring": 6, "number": 4, "center": [ 0.2842, 0.3463 ] },
|
||||
{ "ring": 6, "number": 5, "center": [ 0.2112, 0.3951 ] },
|
||||
{ "ring": 6, "number": 6, "center": [ 0.1300, 0.4287 ] },
|
||||
{ "ring": 6, "number": 7, "center": [ 0.0439, 0.4458 ] },
|
||||
{ "ring": 6, "number": 8, "center": [ -0.0439, 0.4458 ] },
|
||||
{ "ring": 6, "number": 9, "center": [ -0.1300, 0.4287 ] },
|
||||
{ "ring": 6, "number": 10, "center": [ -0.2112, 0.3951 ] },
|
||||
{ "ring": 6, "number": 11, "center": [ -0.2842, 0.3463 ] },
|
||||
{ "ring": 6, "number": 12, "center": [ -0.3463, 0.2842 ] },
|
||||
{ "ring": 6, "number": 13, "center": [ -0.3951, 0.2112 ] },
|
||||
{ "ring": 6, "number": 14, "center": [ -0.4287, 0.1300 ] },
|
||||
{ "ring": 6, "number": 15, "center": [ -0.4458, 0.0439 ] },
|
||||
{ "ring": 6, "number": 16, "center": [ -0.4458, -0.0439 ] },
|
||||
{ "ring": 6, "number": 17, "center": [ -0.4287, -0.1300 ] },
|
||||
{ "ring": 6, "number": 18, "center": [ -0.3951, -0.2112 ] },
|
||||
{ "ring": 6, "number": 19, "center": [ -0.3463, -0.2842 ] },
|
||||
{ "ring": 6, "number": 20, "center": [ -0.2842, -0.3463 ] },
|
||||
{ "ring": 6, "number": 21, "center": [ -0.2112, -0.3951 ] },
|
||||
{ "ring": 6, "number": 22, "center": [ -0.1300, -0.4287 ] },
|
||||
{ "ring": 6, "number": 23, "center": [ -0.0439, -0.4458 ] },
|
||||
{ "ring": 6, "number": 24, "center": [ 0.0439, -0.4458 ] },
|
||||
{ "ring": 6, "number": 25, "center": [ 0.1300, -0.4287 ] },
|
||||
{ "ring": 6, "number": 26, "center": [ 0.2112, -0.3951 ] },
|
||||
{ "ring": 6, "number": 27, "center": [ 0.2842, -0.3463 ] },
|
||||
{ "ring": 6, "number": 28, "center": [ 0.3463, -0.2842 ] },
|
||||
{ "ring": 6, "number": 29, "center": [ 0.3951, -0.2112 ] },
|
||||
{ "ring": 6, "number": 30, "center": [ 0.4287, -0.1300 ] },
|
||||
{ "ring": 6, "number": 31, "center": [ 0.4458, -0.0439 ] },
|
||||
{ "ring": 7, "number": 0, "center": [ 0.4757, 0.0469 ] },
|
||||
{ "ring": 7, "number": 1, "center": [ 0.4574, 0.1388 ] },
|
||||
{ "ring": 7, "number": 2, "center": [ 0.4216, 0.2253 ] },
|
||||
{ "ring": 7, "number": 3, "center": [ 0.3695, 0.3032 ] },
|
||||
{ "ring": 7, "number": 4, "center": [ 0.3032, 0.3695 ] },
|
||||
{ "ring": 7, "number": 5, "center": [ 0.2253, 0.4216 ] },
|
||||
{ "ring": 7, "number": 6, "center": [ 0.1388, 0.4574 ] },
|
||||
{ "ring": 7, "number": 7, "center": [ 0.0469, 0.4757 ] },
|
||||
{ "ring": 7, "number": 8, "center": [ -0.0469, 0.4757 ] },
|
||||
{ "ring": 7, "number": 9, "center": [ -0.1388, 0.4574 ] },
|
||||
{ "ring": 7, "number": 10, "center": [ -0.2253, 0.4216 ] },
|
||||
{ "ring": 7, "number": 11, "center": [ -0.3032, 0.3695 ] },
|
||||
{ "ring": 7, "number": 12, "center": [ -0.3695, 0.3032 ] },
|
||||
{ "ring": 7, "number": 13, "center": [ -0.4216, 0.2253 ] },
|
||||
{ "ring": 7, "number": 14, "center": [ -0.4574, 0.1388 ] },
|
||||
{ "ring": 7, "number": 15, "center": [ -0.4757, 0.0469 ] },
|
||||
{ "ring": 7, "number": 16, "center": [ -0.4757, -0.0469 ] },
|
||||
{ "ring": 7, "number": 17, "center": [ -0.4574, -0.1388 ] },
|
||||
{ "ring": 7, "number": 18, "center": [ -0.4216, -0.2253 ] },
|
||||
{ "ring": 7, "number": 19, "center": [ -0.3695, -0.3032 ] },
|
||||
{ "ring": 7, "number": 20, "center": [ -0.3032, -0.3695 ] },
|
||||
{ "ring": 7, "number": 21, "center": [ -0.2253, -0.4216 ] },
|
||||
{ "ring": 7, "number": 22, "center": [ -0.1388, -0.4574 ] },
|
||||
{ "ring": 7, "number": 23, "center": [ -0.0469, -0.4757 ] },
|
||||
{ "ring": 7, "number": 24, "center": [ 0.0469, -0.4757 ] },
|
||||
{ "ring": 7, "number": 25, "center": [ 0.1388, -0.4574 ] },
|
||||
{ "ring": 7, "number": 26, "center": [ 0.2253, -0.4216 ] },
|
||||
{ "ring": 7, "number": 27, "center": [ 0.3032, -0.3695 ] },
|
||||
{ "ring": 7, "number": 28, "center": [ 0.3695, -0.3032 ] },
|
||||
{ "ring": 7, "number": 29, "center": [ 0.4216, -0.2253 ] },
|
||||
{ "ring": 7, "number": 30, "center": [ 0.4574, -0.1388 ] },
|
||||
{ "ring": 7, "number": 31, "center": [ 0.4757, -0.0469 ] },
|
||||
{ "mark": 1, "number": 0, "center": [ 0.3141, -0.1301 ] },
|
||||
{ "mark": 1, "number": 1, "center": [ 0.0933, -0.4688 ] },
|
||||
]
|
||||
}
|
||||
205
mask/json.c
Normal file
205
mask/json.c
Normal file
@@ -0,0 +1,205 @@
|
||||
#include <sys/mman.h>
|
||||
#include <json/json.h>
|
||||
|
||||
#define FREE(ptr) do{free(ptr); ptr = NULL;}while(0)
|
||||
|
||||
typedef struct{
|
||||
float x0; // left border
|
||||
float y0; // lower border
|
||||
float w; // width
|
||||
float h; // height
|
||||
} BBox;
|
||||
typedef enum{
|
||||
H_SQUARE // square hole
|
||||
,H_ELLIPSE // elliptic hole
|
||||
,H_UNDEF
|
||||
} HoleType;
|
||||
typedef struct{
|
||||
BBox box; // bounding box of hole
|
||||
int type; // type, in case of round hole borders of box are tangents to hole
|
||||
} aHole;
|
||||
|
||||
aHole globHole;
|
||||
|
||||
double get_jdouble(json_object *jobj){
|
||||
enum json_type type = json_object_get_type(jobj);
|
||||
double val;
|
||||
switch(type){
|
||||
case json_type_double:
|
||||
val = json_object_get_double(jobj);
|
||||
break;
|
||||
case json_type_int:
|
||||
val = json_object_get_int(jobj);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Wrong value! Get non-number!\n");
|
||||
exit(-1);
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
double *json_get_array(json_object *jobj, int *getLen){
|
||||
enum json_type type;
|
||||
json_object *jarray = jobj;
|
||||
int arraylen = json_object_array_length(jarray);
|
||||
double *arr = calloc(arraylen, sizeof(double));
|
||||
int L = 0;
|
||||
int i;
|
||||
json_object *jvalue;
|
||||
for (i=0; i< arraylen; i++){
|
||||
jvalue = json_object_array_get_idx(jarray, i);
|
||||
type = json_object_get_type(jvalue);
|
||||
if(type == json_type_array){ // nested arrays is error
|
||||
fprintf(stderr, "Invalid file format! Found nested arrays!\n");
|
||||
exit(-1);
|
||||
}
|
||||
else if (type != json_type_object){
|
||||
arr[L++] = get_jdouble(jvalue);
|
||||
}
|
||||
else{ // non-numerical data?
|
||||
fprintf(stderr, "Invalid file format! Non-numerical data in array!\n");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
if(L == 0) FREE(arr);
|
||||
if(getLen) *getLen = L;
|
||||
return arr;
|
||||
}
|
||||
|
||||
void get_obj_params(json_object *jobj, aHole *H){
|
||||
double *arr = NULL;
|
||||
int Len;
|
||||
enum json_type type;
|
||||
if(!H){
|
||||
fprintf(stderr, "Error: NULL instead of aHole structure!\n");
|
||||
exit(-1);
|
||||
}
|
||||
memcpy(H, &globHole, sizeof(aHole)); // initialize hole by global values
|
||||
json_object *o = json_object_object_get(jobj, "shape");
|
||||
if(o){
|
||||
const char *ptr = json_object_get_string(o);
|
||||
if(strcmp(ptr, "square") == 0) H->type = H_SQUARE;
|
||||
else if(strcmp(ptr, "round") == 0 || strcmp(ptr, "ellipse") == 0 ) H->type = H_ELLIPSE;
|
||||
else H->type = H_UNDEF;
|
||||
}
|
||||
o = json_object_object_get(jobj, "radius");
|
||||
if(o){
|
||||
type = json_object_get_type(o);
|
||||
if(type == json_type_int || type == json_type_double){ // circle / square
|
||||
double R = json_object_get_double(o);
|
||||
H->box.w = H->box.h = R * 2.;
|
||||
}else if(type == json_type_array){ // ellipse / rectangle
|
||||
if(!(arr = json_get_array(o, &Len)) || Len != 2){
|
||||
fprintf(stderr, "\"radius\" array must consist of two doubles!\n");
|
||||
exit(-1);
|
||||
}
|
||||
H->box.w = arr[0] * 2.; H->box.h = arr[1] * 2.;
|
||||
FREE(arr);
|
||||
}else{
|
||||
fprintf(stderr, "\"radius\" must be a number or an array of two doubles!\n");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
o = json_object_object_get(jobj, "center");
|
||||
if(o){
|
||||
if(!(arr = json_get_array(o, &Len)) || Len != 2){
|
||||
fprintf(stderr, "\"center\" must contain an array of two doubles!\n");
|
||||
exit(-1);
|
||||
}
|
||||
H->box.x0 = arr[0] - H->box.w/2.;
|
||||
H->box.y0 = arr[1] - H->box.h/2.;
|
||||
FREE(arr);
|
||||
}else{
|
||||
o = json_object_object_get(jobj, "bbox");
|
||||
if(o){
|
||||
if(!(arr = json_get_array(o, &Len)) || Len != 4){
|
||||
fprintf(stderr, "\"bbox\" must contain an array of four doubles!\n");
|
||||
exit(-1);
|
||||
}
|
||||
H->box.x0 = arr[0]; H->box.y0 = arr[1]; H->box.w = arr[2]; H->box.h = arr[3];
|
||||
FREE(arr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
aHole *json_parse_holesarray(json_object *jobj, int *getLen){
|
||||
enum json_type type;
|
||||
json_object *jarray = jobj;
|
||||
int arraylen = json_object_array_length(jarray), i;
|
||||
aHole *H = calloc(arraylen, sizeof(aHole));
|
||||
json_object *jvalue;
|
||||
for (i=0; i < arraylen; i++){
|
||||
jvalue = json_object_array_get_idx(jarray, i);
|
||||
type = json_object_get_type(jvalue);
|
||||
if(type == json_type_object){
|
||||
get_obj_params(jvalue, &H[i]);
|
||||
}else{
|
||||
fprintf(stderr, "Invalid holes array format!\n");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
if(getLen) *getLen = arraylen;
|
||||
return H;
|
||||
}
|
||||
|
||||
char *gettype(aHole *H){
|
||||
char *ret;
|
||||
switch(H->type){
|
||||
case H_SQUARE:
|
||||
ret = "square";
|
||||
break;
|
||||
case H_ELLIPSE:
|
||||
ret = "ellipse";
|
||||
break;
|
||||
default:
|
||||
ret = "undefined";
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv){
|
||||
char *ptr;
|
||||
struct stat statbuf;
|
||||
enum json_type type;
|
||||
int fd, i, HolesNum;
|
||||
aHole *HolesArray;
|
||||
size_t Mlen;
|
||||
if(argc == 2){
|
||||
if ((fd = open (argv[1], O_RDONLY)) < 0) err (1, "Can't open %s for reading", argv[1]);
|
||||
if (fstat (fd, &statbuf) < 0) err (1, "Fstat error");
|
||||
Mlen = statbuf.st_size;
|
||||
if ((ptr = mmap (0, Mlen, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED)
|
||||
err(1, "Mmap error for input");
|
||||
}else{
|
||||
fprintf(stderr, "No file given!\n");
|
||||
exit(-1);
|
||||
}
|
||||
json_object * jobj = json_tokener_parse(ptr);
|
||||
get_obj_params(jobj, &globHole);
|
||||
json_object *o = json_object_object_get(jobj, "holes");
|
||||
if(!o){
|
||||
fprintf(stderr, "Corrupted file: no holes found!\n");
|
||||
exit(-1);
|
||||
}
|
||||
type = json_object_get_type(o);
|
||||
if(type == json_type_object){ // single hole
|
||||
HolesArray = calloc(1, sizeof(aHole));
|
||||
assert(HolesArray);
|
||||
HolesNum = 1;
|
||||
get_obj_params(o, HolesArray);
|
||||
}else{ // array of holes
|
||||
HolesArray = json_parse_holesarray(o, &HolesNum);
|
||||
}
|
||||
if(!HolesArray || HolesNum < 1){
|
||||
fprintf(stderr, "Didn't find any holes in json file!\n");
|
||||
exit(-1);
|
||||
}
|
||||
printf("Readed %d holes\n", HolesNum);
|
||||
for(i = 0; i < HolesNum; i++){
|
||||
BBox *B = &HolesArray[i].box;
|
||||
printf("Hole %d: type=%s, bbox={%g, %g, %g, %g}\n", i, gettype(&HolesArray[i]),
|
||||
B->x0, B->y0, B->w, B->h);
|
||||
}
|
||||
munmap(ptr, Mlen);
|
||||
return 0;
|
||||
}
|
||||
34
mask/make_mask.m
Normal file
34
mask/make_mask.m
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
function make_mask()
|
||||
% ÐÏÓÔÒÏÅÎÉÅ ÇÁÒÔÍÁÎÏ×ÓËÏÊ ÍÁÓËÉ
|
||||
% SS - ÒÁÚÍÅÒ ÍÁÓËÉ
|
||||
f = fopen("holes.json", "w");
|
||||
R = [175 247 295 340 379 414 448 478] * 1e-3; % ÒÁÄÉÕÓÙ ËÏÌÅÃ ÎÁ ÇÁÒÔÍÁÎÏÇÒÁÍÍÅ
|
||||
HoleR = 7.5e-3; % ÒÁÄÉÕÓ ÏÔ×ÅÒÓÔÉÊ - 7.5ÍÍ
|
||||
R0 = .6; % ÒÁÄÉÕÓ ÓÁÍÏÊ ÇÁÒÔÍÁÎÏÇÒÁÍÍÙ
|
||||
alpha0 = pi/32; % ÓÍÅÝÅÎÉÅ ÌÕÞÅÊ ÏÔÎÏÓÉÔÅÌØÎÏ ÓÅËÕÝÉÈ ÇÏÒÉÚÏÎÔÁÌÉ/×ÅÒÔÉËÁÌÉ
|
||||
Angles = [0:31] * 2 * alpha0 + alpha0; % ÕÇÌÙ, ÐÏ ËÏÔÏÒÙÍ ÒÁÓÐÏÌÁÇÁÀÔÓÑ ÌÕÞÉ
|
||||
% ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÒÁÚÍÅÓÔÉÔØ ÎÁ ÍÁÓËÅ ÏËÒÕÖÎÏÓÔÉ, ÓÏÚÄÁÄÉÍ ÍÁÓËÕ
|
||||
% ÏËÒÕÖÎÏÓÔÉ: zeros(15) Ó ÅÄÉÎÉÃÁÍÉ ÔÁÍ, ÇÄÅ ÄÏÌÖÎÁ ÂÙÔØ ÄÙÒËÁ. úÁÔÅÍ
|
||||
% ÐÏÍÅÔÉÍ ÅÄÉÎÉÃÁÍÉ × mask ÔÅ ÔÏÞËÉ, ËÕÄÁ ÄÏÌÖÅÎ ÐÏÐÁÄÁÔØ ÌÅ×ÙÊ ×ÅÒÈÎÉÊ
|
||||
fprintf(f, "{\n\t\"shape\": \"round\", \"radius\": %f,\n\t\"holes\": [\n" , HoleR);
|
||||
for i = [1 : size(R,2)] % ÃÉËÌ ÐÏ ËÏÌØÃÁÍ
|
||||
x = R(i) * cos(Angles);
|
||||
y = R(i) * sin(Angles);
|
||||
%fprintf(f, "\t\t{\"ring\": %d, \"center\": [%f, %f]\n", i, x[j], y[j]]);
|
||||
printR(f, sprintf("\"ring\": %d", i-1), x, y);
|
||||
endfor
|
||||
% ÐÏÍÅÞÁÅÍ ÍÁÒËÅÒÙ
|
||||
x = R([4 8]) .* cos([-2 -7]* 2 * alpha0);
|
||||
y = R([4 8]) .* sin([-2 -7]* 2 * alpha0);
|
||||
%fprintf(f, "\t\t{\"marker\", \"center\": [%f, %f]\n", x, y);
|
||||
printR(f, sprintf("\"mark\": 1"), x, y);
|
||||
fprintf(f, "\t]\n}\n");
|
||||
fclose(f);
|
||||
endfunction
|
||||
|
||||
function printR(f, msg, x, y)
|
||||
for i = 1:size(x,2)
|
||||
fprintf(f, "\t\t{ %9s, \"number\": %2d, \"center\": [ %7.4f, %7.4f ] },\n", msg, i-1, x(i), y(i));
|
||||
endfor
|
||||
endfunction
|
||||
Reference in New Issue
Block a user