Я начинаю заниматься обработкой изображений в Android. Я пытаюсь создать приложение, в котором мне нужно отделить цветовые каналы от изображения и выполнить вычисления на них.Извлечь ближний инфракрасный (NIR) канал из изображения JPEG в Android
Я успешно извлек RGB-каналы из изображения. Я использую следующий фрагмент кода, приведенные в этом руководстве: https://xjaphx.wordpress.com/2011/06/21/image-processing-filter-color-channels/
Вот фрагмент кода:
public static Bitmap doColorFilter(Bitmap src, double red, double green, double blue) {
int width = src.getWidth();
int height = src.getHeight();
Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
int A, R, G, B;
int pixel;
for(int x = 0; x < width; ++x) {
for(int y = 0; y < height; ++y) {
pixel = src.getPixel(x, y);
A = Color.alpha(pixel);
R = (int)(Color.red(pixel) * red);
G = (int)(Color.green(pixel) * green);
B = (int)(Color.blue(pixel) * blue);
bmOut.setPixel(x, y, Color.argb(A, R, G, B));
}
}
return bmOut;
}
}
Но я не могу понять, каким образом извлечь БИК канала из изображения. Моя цель извлечь этот канал NIR состоит в том, что мне нужно применить индикатор NDVI (Нормализованный разностный индекс растительности) на изображении для анализа.
Кроме того, в этом фрагменте кода подход с грубой силой использовался при запуске нескольких циклов. Таким образом, программа становится очень медленной, а сложность - O (ширина * высота). Что было бы эффективным способом для вычисления этих отдельных каналов?
Снимок экрана свойств изображения:
Пожалуйста, помогите мне с этим вопросом.
нет такой вещи, как канал NIR. – Piglet
NIR - спектральная полоса в мультиспектральном изображении. Я должен применить эту формулу для NDVI: (NIR - Red)/(NIR + Red). Поэтому я предположил, что мы также сможем извлечь NIR из изображения. Неужели я ошибаюсь? @Piglet –
и в каком формате это мультиспектральное изображение? как вы его создаете? – Piglet