使用matlab/octave将图像从rgb转换为hsv再转换为rgb
我正在尝试将彩色图像从rgb转换为hsv(进行更改),然后再转换回rgb。作为一个测试,我做了这段代码只是为了测试如何从rgb到hsv再回到rgb,但当我查看图像时,它只是显示为黑色。我错过了什么 *PS我使用的是octave 3.8.1,它的工作原理类似于matlab使用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
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),您的情况要好得多按丹尼尔的建议。当我测试它时,它会返回原始图像。