Как помним, изображение — это массив пикселей. Нетрудно придумать задачи, когда будет требоваться выбрать пиксели выше(ниже, между) определённого порогового значения.
И тут нам на выручку приходит функция cvThreshold()
— выполняет фиксированное пороговое преобразование для элементов массива.
src — исходный массив(изображение) (одноканальное, 8-битное или 32-битное)
dst — целевой массив, должен иметь тот же тип что и src или 8-битный
threshold — пороговая величина
max_value — максимальное значение (используется совместно с CV_THRESH_BINARY и CV_THRESH_BINARY_INV)
threshold_type — тип порогового преобразования:
#define CV_THRESH_BINARY 0 /* value = value > threshold ? max_value : 0 */
#define CV_THRESH_BINARY_INV 1 /* value = value > threshold ? 0 : max_value */
#define CV_THRESH_TRUNC 2 /* value = value > threshold ? threshold : value */
#define CV_THRESH_TOZERO 3 /* value = value > threshold ? value : 0 */
#define CV_THRESH_TOZERO_INV 4 /* value = value > threshold ? 0 : value */
#define CV_THRESH_MASK 7
#define CV_THRESH_OTSU 8 /* use Otsu algorithm to choose the optimal threshold value;
combine the flag with one of the above CV_THRESH_* values */
обычное пороговое преобразование никак не учитывает, что части объектов могут иметь различную яркость из-за разности в освещённости. Это можно исправить если использовать адаптивное пороговое преобразование, которое рассматривает значение не в одном пикселе, а в окрестности пикселя. Это значение может быть просто средним значением пикселей окрестности(т.е. все пиксели равнозначны)(CV_ADAPTIVE_THRESH_MEAN_C), либо пиксели окрестности умножаются на весовой коэффициент (взвешиваются) в соответствии с функцией, например с гауссовой функцией (CV_ADAPTIVE_THRESH_GAUSSIAN_C).
CVAPI(void) cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),
int threshold_type CV_DEFAULT(CV_THRESH_BINARY),
int block_size CV_DEFAULT(3),
double param1 CV_DEFAULT(5));
— выполняет адаптивное пороговое преобразование для элементов массива.
src — исходное изображение
dst — целевое изображение
max_value — максимальное значение (используется совместно с CV_THRESH_BINARY и CV_THRESH_BINARY_INV)
adaptive_method — используемый адаптационный алгоритм:
#define CV_THRESH_BINARY 0 /* value = value > threshold ? max_value : 0 */
#define CV_THRESH_BINARY_INV 1 /* value = value > threshold ? 0 : max_value */
block_size — размер окрестности (в пикселях), которая используется для расчёта порогового значения: 3, 5, 7 и т.д.
param1 — параметр, зависящий от используемого метода. Для методов CV_ADAPTIVE_THRESH_MEAN_C и CV_ADAPTIVE_THRESH_GAUSSIAN_C — это константа, вычитаемая из среднего или взвешенного значения (может быть отрицательной)
Аналогичный результат можно получить, используя функции для выборки тех пикселей изображения, которые лежат в заданном интервале значений ( могут храниться как в массиве — cvInRange(), так и задаваться скалярами cvInRangeS() )
— по-элементная проверка элементов массива: проверяет, что значения элементов массива лежат между значениями элементов двух других массивов.
формула:
dst(idx) = lower(idx) <= src(idx) < upper(idx)
src — исходный массив
lower — массив с нижней границей (включая)
upper — массив с верхней границей (не включая)
dst — массив для хранения результата (тип 8S или 8U)
— проверяет, что элемент массива лежит между двух скаляров
формула:
dst(idx) = lower <= src(idx) < upper
src — исходный массив
lower — скаляр с нижней границей (включая)
upper — скаляр с верхней границей (не включая)
dst — массив для хранения результата (тип 8S или 8U)
Простой пример практического применения этих функций — выборка определённых областей изображения, которые отличаются от других яркостью (в случае изображения 1-канального изображения (в градациях серого) ) или цветом (в случае цветного изображения).
Комментарии (5)
RSS свернуть / развернутьkorvova@yandex.ru
korvova
orcchg
noonv
Asgard
noonv
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.