计算图片的hsv值matlab程序
2007-05-05 16:30
1106 查看
function hsv = hsv()
n = input('请输入图像的n值(图像的宽度):');
m = input('请输入图像的m值(图像的高度):');
s = input('请输入图像的名字(包括后缀):');
m = double(m);
n = double(n);
divide = m*n;
hsv = ones(1,3);
imgTemp = imread(s);%在输入图像名字时请输入名字及后缀,图像请事先保存在D:/matlabs/work目录下面
r = 1.0*imgTemp(:,:,1) + 0.0*imgTemp(:,:,2) + 0.0*imgTemp(:,:,3);%提取R
g = 0.0*imgTemp(:,:,1) + 1.0*imgTemp(:,:,2) + 0.0*imgTemp(:,:,3);%提取G
b = 0.0*imgTemp(:,:,1) + 0.0*imgTemp(:,:,2) + 1.0*imgTemp(:,:,3);%提取B
r = double(r);
g = double(g);
b = double(b);
temp_h = double(ones(m,n));%声称一个m by n的单位矩阵来存放h值
temp_h2 = double(ones(m,n));
temp_s = double(ones(m,n));%声称一个m by n的单位矩阵来存放s值
temp_v = double(ones(m,n));%声称一个m by n的单位矩阵来存放v值
i = double(0);
while (i < divide)
MAX = max(r(i+1),max(g(i+1),b(i+1)));
MIN = min(r(i+1),min(g(i+1),b(i+1)));
delta = MAX - MIN;
MAX = double(MAX);
MIN = double(MIN);
delta = double(delta);
%计算每一个像素的明度
temp_v(i+1) = MAX/255.0;
%计算每一个向度的饱和度
if MAX == 0
temp_s(i+1) = 0;
else temp_s(i+1) = delta/MAX;
end
%计算每一个像素的色彩
if delta == 0
temp_h2(i+1) = r(i+1)/360.0;
elseif r(i+1) == MAX
if g(i+1) == b(i+1)
temp_h2(i+1) = 0;
else temp_h2(i+1) = (g(i+1) - b(i+1))/delta;
end
elseif g(i+1) == MAX
if b(i+1) == r(i+1)
temp_h2(i+1) = 0;
else temp_h2(i+1) = 2.0 + (b(i+1) - r(i+1))/delta;
end
elseif b(i+1) == MAX
if r(i+1) == g(i+1)
temp_h2(i+1) = 0;
else temp_h2(i+1) = 4.0 + (r(i+1) - g(i+1))/delta;
end
else
temp_h2(i+1) = 0;
end
if temp_h2(i+1) < 0
temp_h2(i+1) = temp_h2(i+1) + 6.0;%避免负的角度
end
temp_h(i+1) = 60 * temp_h2(i+1);
i = i + 1;
end
i = 0;
sum_h = double(0);
sum_s = double(0);
sum_v = double(0);
temp_h = double(temp_h);
temp_s = double(temp_s);
temp_v = double(temp_v);
while (i< divide)
sum_h = sum_h + temp_h(i+1);
sum_s = sum_s + temp_s(i+1);
sum_v = sum_v + temp_v(i+1);
i = i + 1;
end
sum_h = double(sum_h);
sum_s = double(sum_s);
sum_v = double(sum_v);
hsv(1) = sum_h / divide;
hsv(2) = sum_s / divide;
hsv(3) = sum_v / divide;
n = input('请输入图像的n值(图像的宽度):');
m = input('请输入图像的m值(图像的高度):');
s = input('请输入图像的名字(包括后缀):');
m = double(m);
n = double(n);
divide = m*n;
hsv = ones(1,3);
imgTemp = imread(s);%在输入图像名字时请输入名字及后缀,图像请事先保存在D:/matlabs/work目录下面
r = 1.0*imgTemp(:,:,1) + 0.0*imgTemp(:,:,2) + 0.0*imgTemp(:,:,3);%提取R
g = 0.0*imgTemp(:,:,1) + 1.0*imgTemp(:,:,2) + 0.0*imgTemp(:,:,3);%提取G
b = 0.0*imgTemp(:,:,1) + 0.0*imgTemp(:,:,2) + 1.0*imgTemp(:,:,3);%提取B
r = double(r);
g = double(g);
b = double(b);
temp_h = double(ones(m,n));%声称一个m by n的单位矩阵来存放h值
temp_h2 = double(ones(m,n));
temp_s = double(ones(m,n));%声称一个m by n的单位矩阵来存放s值
temp_v = double(ones(m,n));%声称一个m by n的单位矩阵来存放v值
i = double(0);
while (i < divide)
MAX = max(r(i+1),max(g(i+1),b(i+1)));
MIN = min(r(i+1),min(g(i+1),b(i+1)));
delta = MAX - MIN;
MAX = double(MAX);
MIN = double(MIN);
delta = double(delta);
%计算每一个像素的明度
temp_v(i+1) = MAX/255.0;
%计算每一个向度的饱和度
if MAX == 0
temp_s(i+1) = 0;
else temp_s(i+1) = delta/MAX;
end
%计算每一个像素的色彩
if delta == 0
temp_h2(i+1) = r(i+1)/360.0;
elseif r(i+1) == MAX
if g(i+1) == b(i+1)
temp_h2(i+1) = 0;
else temp_h2(i+1) = (g(i+1) - b(i+1))/delta;
end
elseif g(i+1) == MAX
if b(i+1) == r(i+1)
temp_h2(i+1) = 0;
else temp_h2(i+1) = 2.0 + (b(i+1) - r(i+1))/delta;
end
elseif b(i+1) == MAX
if r(i+1) == g(i+1)
temp_h2(i+1) = 0;
else temp_h2(i+1) = 4.0 + (r(i+1) - g(i+1))/delta;
end
else
temp_h2(i+1) = 0;
end
if temp_h2(i+1) < 0
temp_h2(i+1) = temp_h2(i+1) + 6.0;%避免负的角度
end
temp_h(i+1) = 60 * temp_h2(i+1);
i = i + 1;
end
i = 0;
sum_h = double(0);
sum_s = double(0);
sum_v = double(0);
temp_h = double(temp_h);
temp_s = double(temp_s);
temp_v = double(temp_v);
while (i< divide)
sum_h = sum_h + temp_h(i+1);
sum_s = sum_s + temp_s(i+1);
sum_v = sum_v + temp_v(i+1);
i = i + 1;
end
sum_h = double(sum_h);
sum_s = double(sum_s);
sum_v = double(sum_v);
hsv(1) = sum_h / divide;
hsv(2) = sum_s / divide;
hsv(3) = sum_v / divide;
相关文章推荐
- 计算图片亮度的matlab小程序
- Matlab中计算程序运行时间的代码
- Romberg积分法计算定积分(Matlab程序)
- Matlab中计算程序运行时间的几种方法
- 【知识整理】微信小程序-图片在容器中等比缩放至垂直、水平居中,并计算缩放后真实宽高
- Matlab中计算程序运行时间的三种方法
- matlab中,计算,记录,程序运行,起始,结束 时间,间隔 &matlab中 tic,toc函数的用法
- 【MATLAB与C的混合编程】之【C程序调用Matlab计算引擎】(1)
- 【MATLAB与C的混合编程】之【C程序调用Matlab计算引擎】(3)
- 徐海蛟:Matlab计算大规模图片数据集的L1距离
- 计算资源中ICON,Image,Bmp的CRC值,检查自己的程序图片是否被篡改
- 如何利用MATLAB并行计算缩短程序运行时间
- Matlab中计算量较大的程序运行管理注意事项
- Matlab中计算程序运行时间的三种方法
- Matlab 计算程序运行时间
- 【matlab】:matlab实现计算两张图片的相似度
- Matlab按逐个图片计算数据集均值和标准差
- Matlab计算大规模图片数据集的L1距离
- 在图片中选定任意凸多边形制作掩膜程序MATLAB
- matlab 实践程序5——批量将图片转移文件夹