使用matlab/octave将图像从rgb转换为hsv再转换为rgb

使用matlab/octave将图像从rgb转换为hsv再转换为rgb,matlab,octave,rgb,matlab-figure,hsv,Matlab,Octave,Rgb,Matlab Figure,Hsv,我正在尝试将彩色图像从rgb转换为hsv(进行更改),然后再转换回rgb。作为一个测试,我做了这段代码只是为了测试如何从rgb到hsv再回到rgb,但当我查看图像时,它只是显示为黑色。我错过了什么 *PS我使用的是octave 3.8.1,它的工作原理类似于matlab Here are the octave 3.8.1 packages I have loaded: >>> pkg list Package Name | Version | Installation dir

我正在尝试将彩色图像从rgb转换为hsv(进行更改),然后再转换回rgb。作为一个测试,我做了这段代码只是为了测试如何从rgb到hsv再回到rgb,但当我查看图像时,它只是显示为黑色。我错过了什么

*PS我使用的是octave 3.8.1,它的工作原理类似于matlab

Here are the octave 3.8.1 packages I have loaded:
>>> pkg list
Package Name  | Version | Installation directory
--------------+---------+-----------------------
     control *|   2.6.2 | /usr/share/octave/packages/control-2.6.2
     general *|   1.3.4 | /usr/share/octave/packages/general-1.3.4
    geometry *|   1.7.0 | /usr/share/octave/packages/geometry-1.7.0
    parallel *|   2.2.0 | /usr/share/octave/packages/parallel-2.2.0
      signal *|   1.2.2 | /usr/share/octave/packages/signal-1.2.2
     specfun *|   1.1.0 | /usr/share/octave/packages/specfun-1.1.0
测试代码如下:

f=imread('/tmp/bump.jpg'); %color image

%Hue - Saturation - Value 
f_rgb2hsv=rgb2hsv(f); %convert image to HSV double
f_hsv2rgb=hsv2rgb(f_rgb2hsv);%convert to RGB double
f_to_image=uint8(f_hsv2rgb); %convert to uint8 to see image
imshow(f_to_image); 

double
图像的值在[0,1](浮点)范围内,
uint8
图像在[0,2^8-1]范围内(仅整数)。使用
uint8
只需将0和1之间的值转换为0和1,即黑色或接近黑色


使用
im2uint8
im2double
转换图像,这些函数会自动将您的值重新调整到适当的范围。

谢谢,但这需要图像工具箱/图像包,我无权访问。还有别的办法吗?@RickT你为什么不自己做。。。?只要乘以255。或者尝试
imshow(f_to_image,[])@kkuilla我会的,但我不确定该乘什么。我知道RGB是0-255,但是如果HSV是一个小数,我乘以1-255,我仍然剩下一个数字和一个小数。一个简单的例子会有所帮助。@kkuilla imshow(f_to_image,[]);仍然显示黑色image@RickT:许多缺失功能的标准答案。获取倍频程,复制m文件,修复语法(基本上用end替换endfunction、endswitch等),使用它。你能发布一些示例数据吗,请……@kkuilla我已将bump.jpg图像作为您要求的样本数据以及上面的测试代码附加到问题上。如果没有倍频程的图像包,您如何运行
rgb2hsv
?我不能…@kkuilla奇怪,我做了pkg列表来显示安装了哪些软件包,并将其添加到上面的问题中。。。它可能是手动添加的或包含在另一个包中…我必须研究它以找出。。。octave sourceforge网站目前处于关闭状态,但当它恢复运行时,我会看一看,我不知道,但我认为通过执行
f2=im2uint8(f_hsv2rgb),您的情况要好得多