2017-02-01 2 views
2

Я начинаю заниматься обработкой изображений в 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 (ширина * высота). Что было бы эффективным способом для вычисления этих отдельных каналов?

Снимок экрана свойств изображения:

Image

Camera

Advance photo

Пожалуйста, помогите мне с этим вопросом.

+0

нет такой вещи, как канал NIR. – Piglet

+0

NIR - спектральная полоса в мультиспектральном изображении. Я должен применить эту формулу для NDVI: (NIR - Red)/(NIR + Red). Поэтому я предположил, что мы также сможем извлечь NIR из изображения. Неужели я ошибаюсь? @Piglet –

+0

и в каком формате это мультиспектральное изображение? как вы его создаете? – Piglet

ответ

1

С сайта производителя:

NDVI красный + NIR

Эта камера имеет двухдиапазонный фильтр, пойманные отраженный красный свет в красном канале датчика RGB и отраженного света из ближней инфракрасной в синий канал датчика RGB. Таким образом, вы можете использовать эту одиночную камеру для , чтобы вычислить индекс NDVI, хотя контраст в полученном индексе не будет таким «точным», как при использовании отдельных моделей моделей Red и NIR .

+0

Спасибо за это. Но можете ли вы предложить лучший метод для этого вместо двух для циклов? Для циклов for выдается массивное время, которое ухудшает производительность приложения. –