コード例 #1
0
        public void Test_GetMHKernel()
        {
            var exp_width = 9;
            var expected  = new double[]
            {
                -0.000003, -0.000086, -0.000817, -0.003052, -0.004696, -0.003052, -0.000817, -0.000086, -0.000003,
                -0.000086, -0.001975, -0.016538, -0.053904, -0.077763, -0.053904, -0.016538, -0.001975, -0.000086,
                -0.000817, -0.016538, -0.109894, -0.246255, -0.270671, -0.246255, -0.109894, -0.016538, -0.000817,
                -0.003052, -0.053904, -0.246255, 0.000000, 0.606531, 0.000000, -0.246255, -0.053904, -0.003052,
                -0.004696, -0.077763, -0.270671, 0.606531, 2.000000, 0.606531, -0.270671, -0.077763, -0.004696,
                -0.003052, -0.053904, -0.246255, 0.000000, 0.606531, 0.000000, -0.246255, -0.053904, -0.003052,
                -0.000817, -0.016538, -0.109894, -0.246255, -0.270671, -0.246255, -0.109894, -0.016538, -0.000817,
                -0.000086, -0.001975, -0.016538, -0.053904, -0.077763, -0.053904, -0.016538, -0.001975, -0.000086,
                -0.000003, -0.000086, -0.000817, -0.003052, -0.004696, -0.003052, -0.000817, -0.000086, -0.000003,
            };

            var krn = Marr.GetMHKernel(1, 1);
            var i   = krn.GetIndexer();

            for (int row = 0; row < krn.Height; row++)
            {
                for (int col = 0; col < krn.Width; col++)
                {
                    //System.Diagnostics.Debug.Write($"{i[row, col]} ");
                    var exp_value = expected[col + row * exp_width];
                    Assert.AreEqual(exp_value, (double)i[row, col], 0.00001);
                }
            }
        }
コード例 #2
0
        public void Test_GetImageHash()
        {
            var expected = new byte[] { 5, 110, 84, 114, 70, 204, 146, 73, 108, 82, 96, 186, 43, 98, 77, 183, 7, 98, 210, 46, 155, 91, 98, 77, 180, 106, 29, 146, 41, 146, 90, 98, 77, 182, 72, 89, 147, 39, 211, 123, 105, 37, 162, 72, 73, 153, 1, 209, 251, 105, 37, 146, 72, 105, 46, 80, 86, 203, 98, 148, 158, 191, 109, 100, 219, 116, 139, 100, 148, 165, 183, 37 };
            var hash     = Marr.GetImageHash("architecture_2.bmp");

            CollectionAssert.AreEqual(expected, hash);
        }
コード例 #3
0
 public void Test_CountBits()
 {
     Assert.AreEqual(0, Marr.CountBits(0));
     Assert.AreEqual(1, Marr.CountBits(1));
     Assert.AreEqual(1, Marr.CountBits(8));
     Assert.AreEqual(4, Marr.CountBits(89));
     Assert.AreEqual(8, Marr.CountBits(255));
 }
コード例 #4
0
        public void Test_HammingDistance()
        {
            var hashA    = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            var hashB    = new byte[] { 19, 18, 17, 16, 15, 14, 13, 12, 11, 10 };
            var distance = Marr.HammingDistance(hashA, hashB);

            Assert.AreEqual(0.35, distance, 0.0000001);
        }
コード例 #5
0
        public void Test_BuildHash()
        {
            var blocks_size = 31;
            var blocks_img  = new double[]
            {
                135.891144, 136.688538, 140.754456, 138.727676, 129.027527, 149.726181, 138.347763, 127.499733, 128.912292, 128.608139, 144.257568, 124.010315, 136.582352, 126.031494, 139.464966, 134.600266, 136.071457, 133.630356, 138.699402, 135.727997, 138.624161, 139.450058, 138.731689, 139.853119, 136.450897, 136.909683, 139.657333, 132.463394, 135.328049, 135.204239, 136.525879, 132.175186, 137.590485, 134.412704, 129.091660, 122.261101, 137.805786, 130.304520, 133.209946, 137.657318, 136.786377, 150.898331, 128.520630, 138.461212, 131.204041, 140.662872, 134.600266, 136.071457, 133.630356, 138.860107, 136.340057, 139.270935, 139.544891, 138.731689, 140.102020, 138.966492, 138.825211, 141.433334, 135.325211, 138.356750, 138.227036, 138.519730, 129.829285, 134.174377, 139.035767, 139.355728, 127.114029, 151.561432, 142.880585, 138.909561, 130.697784, 137.606827, 135.798904, 133.662857, 138.461212, 131.204041, 140.662872, 134.600266, 136.071457, 133.630356, 138.860107, 136.340057, 139.270935, 139.544891, 138.731689, 140.102020, 138.541183, 139.236160, 144.493073, 138.779358, 141.883621, 140.634186, 137.250641, 129.375351, 135.372055, 129.198532, 133.430740, 135.043594, 130.276550, 126.019768, 124.862015, 137.629578, 139.250015, 139.842056, 134.091187, 136.640060, 131.464050, 142.383392, 134.726242, 135.573776, 133.579391, 138.768204, 136.853287, 138.975800, 139.507706, 139.312943, 139.633484, 138.994858, 138.728088, 139.453506, 134.206299, 136.602005, 137.248978, 135.489960, 134.762680, 134.869171, 136.480347, 136.003906, 134.308105, 141.635925, 134.233688, 131.466599, 143.225967, 137.724747, 142.622742, 134.023407, 134.542603, 131.457779, 144.581100, 134.884674, 134.930954, 133.511536, 138.649857, 137.515671, 138.599258, 139.451385, 140.064133, 139.281082, 139.641495, 138.273010, 138.440918, 137.391373, 138.183182, 138.254578, 136.527359, 124.953445, 135.501953, 138.454559, 130.547791, 127.264236, 133.961685, 131.423462, 130.403000, 132.554184, 135.317749, 145.163803, 135.657166, 136.853104, 129.281631, 144.585464, 134.885742, 134.931854, 133.512253, 138.649918, 137.514908, 138.622818, 139.455551, 140.069565, 140.466858, 138.078995, 140.010544, 138.933868, 136.923294, 137.843063, 137.316071, 138.806641, 130.351013, 138.003876, 129.742661, 134.850555, 133.165512, 139.676193, 133.028793, 132.599808, 134.992233, 144.360535, 133.089554, 141.124008, 141.628174, 130.923431, 147.828857, 135.474670, 135.518677, 133.892120, 138.709625, 137.197861, 137.959641, 138.667313, 141.170990, 141.469543, 139.075241, 138.431305, 138.293396, 137.475937, 137.858734, 138.052383, 137.547821, 136.090973, 133.496536, 134.931747, 131.481766, 131.205856, 134.719971, 133.059143, 129.466171, 130.917953, 139.522995, 130.901321, 137.995636, 132.902405, 133.668198, 130.617111, 137.662125, 133.676437, 133.145218, 138.807220, 137.581955, 139.413986, 141.115936, 138.511032, 141.473297, 137.584427, 139.449921, 137.603638, 137.789368, 138.356094, 137.721207, 138.312515, 140.755417, 128.475952, 136.634674, 133.159332, 132.970459, 136.949142, 131.957993, 133.290131, 141.183273, 128.135864, 138.408356, 139.533798, 138.647919, 137.883240, 132.867493, 138.445694, 134.974670, 132.952927, 138.750824, 137.229202, 138.733597, 140.749603, 139.606674, 140.453384, 138.573074, 138.741226, 137.371277, 135.910355, 136.263565, 137.242294, 137.985962, 137.774017, 130.440582, 131.787064, 134.672501, 132.390869, 133.442703, 135.330322, 132.025558, 130.418991, 132.967133, 137.449051, 133.008224, 131.926956, 142.783997, 131.771240, 138.304779, 135.135529, 133.816666, 138.765152, 137.229202, 138.737717, 141.343735, 140.372421, 140.724182, 138.321762, 138.856552, 136.100082, 136.676712, 135.821518, 137.159943, 136.649918, 137.155930, 133.925995, 132.665878, 129.993362, 133.574341, 132.432800, 130.804276, 132.553864, 133.559525, 134.957458, 137.691299, 138.323364, 133.024994, 140.705734, 133.589661, 139.593826, 134.802200, 133.704529, 138.595795, 137.040527, 138.986801, 141.176147, 139.775421, 139.528870, 139.455978, 137.882385, 136.793411, 135.585007, 135.951065, 136.985260, 136.590546, 133.392059, 138.771530, 132.396194, 132.758011, 134.306183, 133.859741, 133.245605, 133.995621, 132.022507, 136.180099, 137.597290, 138.819824, 127.614548, 134.392365, 136.442978, 142.251892, 134.106598, 133.990311, 138.330093, 136.613831, 139.489426, 140.639511, 141.115570, 140.455627, 138.723358, 138.975525, 135.400818, 136.028580, 136.022720, 136.214539, 137.561005, 137.499023, 137.349182, 134.265564, 132.406204, 133.955490, 134.424179, 131.227905, 131.772598, 132.097183, 136.490173, 139.077759, 137.472763, 139.259567, 132.800751, 136.111847, 145.616379, 134.666840, 133.900208, 138.630692, 136.616608, 139.726593, 140.635605, 141.722229, 140.047592, 138.378113, 139.360001, 134.382980, 135.498962, 134.925064, 135.854843, 136.176483, 130.469910, 131.041306, 135.505234, 132.604370, 133.375092, 134.284302, 131.461777, 132.244568, 131.787033, 135.886414, 138.087921, 135.415619, 142.014389, 130.730453, 130.647522, 143.131546, 134.003052, 133.283325, 139.547623, 136.738678, 140.287582, 140.963409, 139.677689, 140.596664, 138.173462, 137.649124, 134.341110, 135.740402, 133.830246, 135.556946, 135.462296, 134.497910, 137.186172, 134.135101, 132.407730, 133.412415, 134.281876, 131.123779, 134.091141, 134.279907, 135.405502, 140.660858, 137.687027, 135.302368, 129.911697, 135.575470, 141.445541, 135.445633, 133.541229, 137.837112, 137.321548, 140.017700, 140.151550, 142.378738, 140.194992, 139.176315, 137.351471, 135.041489, 135.206436, 133.449921, 136.925659, 135.177399, 131.438919, 135.487595, 132.027069, 131.954025, 132.943069, 133.086807, 132.219955, 132.250366, 133.763504, 134.386169, 135.936035, 138.545502, 135.882385, 132.522461, 132.616898, 140.656601, 136.968063, 132.965149, 138.171295, 137.724869, 140.200104, 141.174957, 141.030075, 139.804932, 138.310593, 137.416382, 135.082367, 134.530014, 133.281342, 136.131317, 136.196381, 139.854858, 131.335846, 133.708664, 132.316330, 131.838257, 131.264145, 133.974625, 136.236084, 130.826202, 135.119644, 142.138336, 139.384918, 135.570007, 133.753387, 130.281219, 143.266312, 138.124100, 132.171982, 138.723404, 137.851791, 140.028336, 141.840652, 141.774368, 139.799454, 137.928955, 137.142227, 135.204636, 134.146729, 133.719162, 136.367874, 135.719681, 141.208099, 134.396042, 133.835495, 134.028091, 129.981354, 134.437775, 134.308228, 131.833710, 141.455917, 133.764603, 138.979462, 140.862259, 133.263123, 135.591400, 121.630028, 140.149231, 138.156876, 132.168243, 138.679626, 138.245255, 139.386154, 140.605148, 141.736816, 140.795792, 136.861832, 137.371490, 134.616333, 133.218887, 132.804169, 135.296478, 136.385208, 130.694168, 130.461517, 133.385559, 130.337784, 128.866348, 131.622620, 133.966675, 132.038330, 126.893944, 138.369507, 144.335373, 134.781403, 134.237747, 135.679962, 132.680710, 137.247665, 145.033035, 132.401230, 139.366074, 139.086563, 140.027634, 142.212814, 141.616150, 141.154755, 136.216248, 137.805252, 134.842773, 132.304276, 134.590195, 135.224823, 136.690018, 134.356979, 133.938629, 132.593277, 134.163467, 133.987473, 131.529968, 135.675034, 134.689209, 134.273972, 137.850204, 140.316223, 138.024323, 133.323029, 130.892090, 121.906075, 128.089951, 148.692230, 133.802872, 138.063263, 138.017105, 140.355606, 141.333298, 141.379501, 140.037323, 136.851913, 137.275574, 134.347153, 132.138458, 134.745377, 136.248734, 136.253113, 137.853088, 127.013451, 137.021301, 133.868744, 126.993446, 137.195984, 139.276337, 134.678619, 140.346100, 140.704987, 139.033493, 135.746918, 131.726242, 134.459747, 123.536522, 124.467972, 148.646576, 133.793457, 137.154449, 138.364120, 139.690414, 142.358688, 141.824295, 139.299561, 136.953217, 136.974152, 135.013687, 131.699005, 135.616898, 137.958557, 135.273941, 139.934525, 128.704803, 135.128952, 129.968796, 123.547607, 133.810715, 138.437134, 135.705124, 137.225754, 135.888840, 138.523605, 136.763535, 135.621994, 138.079773, 135.114044, 124.166077, 156.768585, 134.935532, 138.256058, 139.329117, 140.150940, 142.588974, 142.307663, 138.031281, 137.780914, 136.278946, 134.446594, 133.808868, 133.560516, 137.484192, 135.476227, 130.736145, 128.296967, 138.395813, 138.571701, 136.302475, 136.027054, 143.159271, 135.840607, 139.298813, 132.369644, 140.240723, 134.564362, 136.897446, 124.061348, 124.304626, 112.190857, 154.213867, 132.966248, 136.922974, 139.685349, 139.208069, 141.965530, 140.510773, 138.099808, 137.810684, 135.976624, 133.071335, 133.409821, 135.104919, 137.545151, 135.189148, 127.730362, 139.519714, 135.146851, 130.321869, 127.438667, 138.740128, 136.447433, 136.706039, 140.306046, 131.069077, 142.785156, 133.279968, 135.221741, 135.195938, 127.812172, 123.632332, 158.295013, 134.488815, 136.803970, 140.385071, 139.373749, 141.654236, 140.021591, 138.050018, 137.334351, 135.730438, 134.239548, 133.497147, 135.787582, 138.227188, 136.120911, 133.697372, 134.080582, 134.136536, 141.249664, 143.098328, 135.395279, 135.080917, 134.626328, 134.016754, 144.394836, 150.488388, 128.930710, 130.328949, 131.179077, 130.713638, 115.342125, 157.084000, 135.948639, 135.881256, 140.114670, 140.230225, 140.043091, 139.265900, 138.716583, 136.813995, 134.201080, 132.627136, 135.003357, 136.246964, 137.804550, 137.394836, 139.180511, 140.489777, 138.739197, 138.638565, 141.547791, 140.943924, 137.001877, 140.194611, 144.374725, 131.411392, 136.970566, 138.275452, 129.625427, 132.330078, 130.008194, 111.873032, 152.269089, 137.790161, 136.244659, 141.077805, 139.860001, 140.792999, 139.946045, 137.875366, 135.381973, 134.568588, 133.381027, 134.445221, 137.162704, 137.137848, 137.920654, 128.690994, 134.206451, 132.310333, 141.468079, 131.425064, 135.411392, 138.494156, 140.006393, 138.092651, 141.308990, 132.500290, 130.719971, 135.596954, 131.363235, 129.880280, 118.114746, 151.968536, 139.284607, 135.110550, 140.479263, 140.832397, 139.568085, 139.727066, 137.537384, 133.576736, 135.237900, 134.485672, 134.130600, 137.690582, 136.261246, 138.266556, 139.038254, 138.626495, 136.111313, 139.579239, 148.903885, 129.864197, 136.361435, 143.587173, 130.832260, 134.519333, 134.860764, 129.558426, 133.658981, 128.178513, 128.733032, 123.112297, 138.089066, 145.114044, 135.573547, 140.489380, 140.443008, 139.447830, 138.812439, 134.024719, 134.758209, 134.347748, 133.189011, 134.222137, 138.337357, 136.802261, 138.583282, 137.312988, 136.355469, 135.393646, 137.903748, 142.362228, 133.774811, 134.083237, 141.677979, 133.413620, 139.869278, 134.612717, 132.249954, 133.235001, 132.850403, 131.370392, 124.129105, 134.835693, 150.873489, 135.800003, 140.224701, 141.299408, 139.386963, 138.017700, 135.100647, 135.426880, 135.006927, 134.989700, 133.431671, 138.267868, 137.425140, 139.221786, 134.963898, 138.513306, 136.701126, 137.260513, 144.945557, 127.949791, 137.262634, 142.050674, 138.514069, 147.760864, 137.204010, 134.212463, 132.937714, 136.431641, 133.830582, 122.464729, 129.704849, 153.082993, 137.515244, 138.688385, 141.100510, 138.749466, 135.793274, 135.861313, 134.484344, 134.419388, 135.548080, 133.159302, 138.671921, 137.584732, 139.094055, 133.383865, 139.476135, 136.724701, 135.885147, 143.583740, 130.085968, 135.666824, 145.832275, 123.908470, 127.602470, 139.599442, 126.421967, 131.845688, 129.821671, 130.520294, 122.649422, 129.144241, 155.748123, 138.701782, 137.364487, 138.583939, 136.602692, 137.473557, 136.667526, 137.453949, 139.332443, 134.748627, 133.613846, 139.112900, 136.831818, 138.991302,
            };
            var blocks   = new OpenCvSharp.Mat <float>(blocks_size, blocks_size, new OpenCvSharp.Scalar(0));
            var blocks_i = blocks.GetIndexer();

            for (int row = 0; row < blocks.Height; row++)
            {
                for (int col = 0; col < blocks.Width; col++)
                {
                    blocks_i[row, col] = (float)blocks_img[row * blocks_size + col];
                }
            }

            var expected = new byte[] { 232, 180, 205, 86, 210, 74, 216, 146, 62, 237, 96, 169, 68, 210, 75, 102, 57, 174, 178, 39, 41, 57, 34, 74, 107, 104, 210, 197, 109, 153, 54, 82, 75, 71, 108, 218, 152, 22, 77, 123, 123, 107, 47, 100, 219, 180, 179, 249, 187, 201, 35, 107, 104, 146, 28, 76, 92, 65, 105, 38, 82, 102, 205, 141, 203, 23, 59, 132, 150, 208, 12, 109 };
            var hash     = Marr.BuildHash(blocks);

            CollectionAssert.AreEqual(expected, hash);
        }