Вычислить площадь под кривой в гистограмме с помощью Android Opencv

Я делаю проект для Android, в котором у меня есть две точки на картинке, и мне нужно рассчитать среднее значение ч/б обеих точек. Один маленький и слегка прозрачный, другой темный и большой круг (точка). Итак, я хочу рассчитать среднее значение ч/б или разницу ч/б. Цвет точек красный. Я делаю это в Matlab, создавая гистограмму и выбирая обе гистограммы. Matlab дает мне площадь под кривой, после чего я легко вычисляю разницу или усредняю ​​ч/б два изображения. Я сделал гистограмму, но не смог получить среднее ч/б две точки. Мой код гистограммы Opencv

Mat rgba = new Mat();
                Utils.bitmapToMat(bitmap, rgba);

                // Get the bitmap size.
                Size rgbaSize = rgba.size();
                // Set the amount of bars in the histogram.
                int histSize = 256;
                MatOfInt histogramSize = new MatOfInt(histSize);

                // Set the height of the histogram and width of the bar.
                int histogramHeight = (int) rgbaSize.height;
                int binWidth = 5;

                // Set the value range.
                MatOfFloat histogramRange = new MatOfFloat(0f, 256f);

                // Create two separate lists: one for colors and one for channels (these will be used as separate datasets).
                Scalar[] colorsRgb = new Scalar[]{new Scalar(220, 0, 0, 255), new Scalar(0, 200, 0, 255), new Scalar(0, 0, 200, 255)};
                MatOfInt[] channels = new MatOfInt[]{new MatOfInt(0), new MatOfInt(1), new MatOfInt(2)};

                // Create an array to be saved in the histogram and a second array, on which the histogram chart will be drawn.
                Mat[] histograms = new Mat[]{new Mat(), new Mat(), new Mat()};
                Mat histMatBitmap = new Mat(rgbaSize, CvType.CV_8UC3, new Scalar(256, 256, 256));
               // Mat histMatBitmap = new Mat(rgbaSize, rgba.type());

                for ( int i = 0; i < channels.length; i++ ) {
                    Imgproc.calcHist(Collections.singletonList(rgba), channels[0], new Mat(), histograms[i], histogramSize, histogramRange);
                    Core.normalize(histograms[i], histograms[i], histogramHeight, 0, Core.NORM_INF);
                    for ( int j = 0; j < histSize; j++ ) {
                        Point p1 = new Point(binWidth * (j - 1), histogramHeight - Math.round(histograms[i].get(j - 1, 0)[0]));
                        Point p2 = new Point(binWidth * j, histogramHeight - Math.round(histograms[i].get(j, 0)[0]));
                        Imgproc.line(histMatBitmap, p1, p2, colorsRgb[0], 3, 8, 0);
                    }
                }


                //convert Mat to bitmap
                Bitmap graphBitmap = Bitmap.createBitmap(histMatBitmap.cols(), histMatBitmap.rows(), Bitmap.Config.ARGB_8888);
                Utils.matToBitmap(histMatBitmap, graphBitmap);

                // show histogram
                histogramImageView.setImageBitmap(graphBitmap)

Исходный код Связь

Мое изображение введите описание изображения здесь

и результирующее изображение введите описание изображения здесь

Предоставьте минимальный, полный и проверяемый пример и примеры изображений. Кроме того, возможно, добавьте изображения, результаты и т. д. из ваших успешных примеров Matlab, чтобы дополнительно проиллюстрировать, чего вы точно хотите достичь.

HansHirse 14.03.2019 13:31

Пожалуйста, проверьте, что я загрузил

Muhammad Sameer Amjad 14.03.2019 13:40

Не уверен, что действительно понимаю проблему - площадь гистограммы - это просто сумма полей гистограммы; высота определяется количеством, а ширина определяется шириной бункеров. Вы можете просто вычислить его с помощью простого цикла for, перебирая каждую ячейку на гистограмме.

alkasm 14.03.2019 19:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
182
0

Другие вопросы по теме