Получение средней серой шкалы каждого канала (R, G, B) изображения [MATLAB] - PullRequest
1 голос
/ 22 октября 2011

ЕЩЕ НУЖНА ПОМОЩЬ, ОТВЕТЫ НЕ БЫЛИ ТО, ЧТО Я ИЩУ!

Мне нужна функция, которая дает мне среднюю шкалу серого для каждого канала (R, G, B) изображения

ave = getAverageGreyScale(image)

ave должен возвращать вектор из 3 элементов. Каждый со средней серой шкалой одного канала (R, G, B):

[a b c]
a = средняя шкала серого R
b = средняя шкала серого G
c = средняя шкала серого B

Все еще нуждайтесь в помощи! Кто-нибудь может мне помочь с этим?
Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

Я думаю, что вы ищете

function [Ravg, Gavg, Bavg] = getAverageRGBValues(I)

Ravg = mean(mean(I(:, :, 1)));
Gavg = mean(mean(I(:, :, 2)));
Bavg = mean(mean(I(:, :, 3)));

Предполагая, что I - это матрица rows x cols x 3 (из которой вы получаете, например, imread).

1 голос
/ 22 октября 2011

Изменить после уточнения:

Вам нужно среднее значение по измерениям 1 и 2, используйте:

ave = mean(mean(image,2),1);

Оригинальный ответ:

Если (как это используется) ваше изображение представляет собой 3-мерную матрицу с длиной последнего измерения 3, вы можете просто использовать:

ave=squeeze(mean(image,3)); %#compute the average value for each pixel along the third dimension

Среднее значение является приблизительной оценкой яркости, но лучшим подходом было бы сначала умножить каждую цветовую плоскость на другой коэффициент, поскольку красный, зеленый и синий не равняются яркости. Стандартные коэффициенты :

  • 0,3 для красного
  • 0,59 для зеленого
  • 0,11 для синего

Ваш код будет выглядеть следующим образом:

ave=image(:,:,1)*0.3 + image(:,:,2)*0.59 + image(:,:,3)*0.11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...