【发布时间】:2016-07-14 09:46:51
【问题描述】:
我试图通过转换图片的 rgb 值 (80*120) 来制作一种 hsv 直方图。 这是代码:
function Image_histogram = hsvHistogram(path, count_bins)
Image = double(imread(path));
Image_histogram = zeros(3 * count_bins);
[n m] = size(Image);
H_vect = zeros(n, m);
S_vect = zeros(n, m);
V_vect = zeros(n, m);
hue_vect = zeros(1, count_bins);
saturation_vect = zeros(1, count_bins);
value_vect = zeros(1, count_bins);
for line = 1 : n
for row = 1 : m
%[H_vect(line, row), S_vect(line, row), V_vect(line, row)] = rgb2hsv(Image(line, row, 1), Image(line, row, 2), Image(line, row, 3));
endfor
endfor
number = 100/count_bins;
for count = 0 : count_bins - 1
left = (number * count);
right = (number * count + number);
hue_vect(1, count + 1) = (sum(sum(H_vect(:,:) >= left & H_vect(:,:) < right)));
saturation_vect(1, count + 1) = (sum(sum(S_vect(:,:) >= left & S_vect(:,:) < right)));
value_vect(1, count + 1) = (sum(sum(V_vect(:,:) >= left & V_vect(:,:) < right)));
endfor
Image_histogram = horzcat(hue_vect, saturation_vect, value_vect);
endfunction
当我尝试获取 HSV 矩阵时,我总是得到错误:hsvHistogram: A(I,J,...): index to dimension 2 out of bounds; value 121 out of bound 120
rgb2hsv 是一个逐像素转换器。它将 R G B 转换为 H S V。它不是内置的 rgb2hsv 函数。注释行似乎是有问题的行。
【问题讨论】:
-
如果注释行是引发错误的行,考虑到该行包含您的
rgb2hsv(),您也应该附上此类函数的代码。否则我们无能为力。显然该函数内部有问题。 -
rgb2hsv 函数是此处描述的函数rapidtables.com/convert/color/rgb-to-hsv.htm。唯一的区别是我在 [0,100] 区间中有 H S V。 H=(H/360) * 100, S = (delta/Cmax) * 100, V = Cmax * 100
标签: matlab image-processing octave rgb hsv