2015-04-24 2 views
1

Я прочитал, что если изображение оттенки серого, то он не должен иметь B и R компонент в RGB и не U и V в YUV цветовые пространства. Означает ли это, что они должны быть равны 0?преобразования полутонового изображения из RGB в YUV дает ненулевой U и V

Я использую этот код, чтобы получить значения YUV:

var px = (this.canvas.Image as Bitmap).GetPixel(i, j); 

var y = 0.299 * px.R + 0.587 * px.G + 0.114 * px.B; 
var u = -0.14713 * px.R - 0.28886 * px.G + 0.436 * px.B; 
var v = 0.615 * px.R - 0.51499 * px.G - 0.10001 * px.B; 

И я получаю ненулевое U и V значения, хотя они близки к 0. Если я конвертировать их в int в любом случае? Изображение было действительно серого?

ответ

1

Ваше преобразование из RBG в YUV использует умножение со значениями с плавающей запятой. Оба умножения с плавающей запятой и формулы, которые вы используете, являются приблизительными, поэтому не странно, что результирующие значения не равны 0 , даже если это было изображение в оттенках серого. Вероятно, безопасно установить u и v на 0, если хотите.

1

Предполагая, что ваше входное изображение задано в цветовом пространстве RGB (красный-зеленый-синий), то все три компонента должны иметь одинаковое значение для каждого пикселя. Если это не так (вы можете или не хотите пренебрегать небольшими различиями, хотя) для вашего изображения, то это не совсем серый. RGB имеет три действительно окрашенных компонента.

С другой стороны, цветовое пространство YUV имеет один канал яркости (или яркости), который является компонентом Y и 2 цветными каналами (U- и V-компоненты).

Y построен из RGB-компонентов по средневзвешенному значению, см. Код, вычисляющий y. Тем не менее, зеленый компонент получает больше веса, чтобы напоминать чувствительность человеческого глаза. Три coeeficients суммируются до 1.0 и все положительные, поэтому они вычисляют линейную комбинацию, аналогичную средней.

Но 3 коэффициента для вычисления U-компонентов (наиболее чувствительны к синим цветам) суммируются до 0,0. (тот же для V-компонента, который наиболее чувствителен к красным цветам). Поэтому, предполагая, что вы добавили истинно серо-масштабированное RGB-изображение, получившиеся U и V будут равны 0.0.

Если это не так (предположим, что очень маленькие значения, чтобы просто быть шумными вариантами 0), то снова ваше изображение RGB-изображения не было действительно серо-масштабированным изображением.