Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab RGB 2 HSV转换中的块伪影_Matlab_Image Processing_Rgb_Hsv - Fatal编程技术网

Matlab RGB 2 HSV转换中的块伪影

Matlab RGB 2 HSV转换中的块伪影,matlab,image-processing,rgb,hsv,Matlab,Image Processing,Rgb,Hsv,我想在MATLAB中将图像从RGB空间转换为HSV,并使用色调 然而,当我使用“rgb2hsv”或我在互联网上找到的一些其他代码时,色调组件有块瑕疵。原始图像和块伪影版本的示例如下所示 起初的 色调 我能够重现你的错误。对于正在阅读并希望在自己端复制此图像的人,您可以执行以下操作: im = imread('http://i.stack.imgur.com/Lw8rj.jpg'); im2 = rgb2hsv(im); imshow(im2(:,:,1)); 此代码将生成OP显示给我们的输出

我想在MATLAB中将图像从RGB空间转换为HSV,并使用色调

然而,当我使用“rgb2hsv”或我在互联网上找到的一些其他代码时,色调组件有块瑕疵。原始图像和块伪影版本的示例如下所示

起初的

色调
我能够重现你的错误。对于正在阅读并希望在自己端复制此图像的人,您可以执行以下操作:

im = imread('http://i.stack.imgur.com/Lw8rj.jpg');
im2 = rgb2hsv(im);
imshow(im2(:,:,1));
此代码将生成OP显示给我们的输出图像


您直接使用色调并显示结果。您应该注意,根据RGB颜色空间,色调与灰度强度的解释不同

您可能应该参考。色调基本上是指人类如何感知将要呈现的颜色,或人类视觉系统解释的主导颜色。这是沿HSV圆锥体中的圆形开口形成的角度。RGB颜色空间可以表示为将其所有颜色限制在一个立方体中。这是一个3D空间,其中每个轴表示每个原色(红、绿、蓝)的数量,这些原色构成了所讨论的彩色像素。将像素转换为HSV,也称为色调饱和度值,将RGB颜色空间转换为圆锥体。圆锥体可以通过从圆锥体原点向上移动的距离(值)、从圆锥体中心向外移动的距离(饱和度)和圆锥体圆形开口周围的角度(色调)进行参数化

这就是HSV圆锥体的外观:

资料来源:

色调角度与主色调/感知颜色之间的映射如下所示:

资料来源:

正如你所看到的,每个角度都表示主色调。在MATLAB中,这是在
[0,1]
之间缩放的。因此,您没有正确地可视化色调。您正在使用色调通道将此结果直接显示为灰度图像

然而,如果你扫描这幅图像中的值,然后将每个结果乘以360,然后参考我上面显示的色调颜色表,这将为你提供这些像素位置的主色的表示


这个故事的寓意是,你不能简单地使用色调和形象化的结果。转换为HSV当然可以用作预处理步骤,但在任何有成效的事情发生之前,您应该在这个领域做更多的处理。正如您在输出图像中看到的那样,直接将其视为图像是非常无用的。你能做的就是使用一个颜色图,它可以导出色调和颜色之间的关系,就像我给你展示的色调查找图,然后你可以给你的图像上色,但这实际上只是一个观察工具


编辑:2014年7月23日 作为奖励,我们可以做的是将色调显示为初始灰度图像,然后对图像应用适当的颜色贴图,这样我们就可以直观地看到每个位置的主色调。幸运的是,有一个内置的HSV颜色图,它与我上面展示的颜色查找图几乎相同。您只需在显示色调通道后立即执行
colormap hsv
。我们可以通过执行以下操作,将原始图像和此彩色图像并排显示:

im = imread('http://i.stack.imgur.com/Lw8rj.jpg');
im2 = rgb2hsv(im);
subplot(1,2,1);
imshow(im); title('Original Image');
subplot(1,2,2);
imshow(im2(:,:,1)); title('Hue channel - Colour coded');
colormap hsv;
这是该图的外观:

这个数字可能有点混乱。它将天空标记为蓝色为主色。尽管这令人困惑,但这确实有道理。在晴朗的日子,天空是蓝色的,但这张照片中天空呈现灰色的原因可能是由于饱和度和数值的贡献。饱和度是指颜色的“纯净度”。例如,真红色(
RGB=[255,0,0]
)表示饱和度为100%。值是指颜色的强度。基本上,它指的是颜色有多暗或多亮。因此,饱和度和值很可能在这里起作用,使颜色呈现灰色。我们在图像中看到的少量颜色正是我们所期望的颜色。例如,沿喷气式运输机一侧的红色被视为红色,绿色头盔被视为绿色。航空母舰的下半身(显然)也被认为是红色的。这我不能向你们解释,但是饱和度和值对混合有影响,所以整体输出颜色大约是灰色

您在图像中看到的块状很可能是由于JPEG量化造成的。JPEG的工作原理很好,因为我们在图像的平滑区域中看不到任何不连续,但图像的编码方式是,它以这种方式重建图像。。。该方法将大大减少保存图像所需的大小,但使图像在视觉上具有与查看原始图像一样的吸引力



这个故事的寓意是,你当然可以使用色调作为处理链的一部分,但它不是整个图片。您可能需要使用饱和度或值(甚至两者)来帮助您区分颜色。

[1]:[2]:
rgb2hsv
对此不负责任,但您的
“其他一些代码”
可能是?
rgb2hsv
绝对不负责任。此外,色调编码为0到360度之间的角度,但在[0,1]之间进行规格化。您是否试图直接使用此作为结果?如果你是,那么这很可能就是为什么你会得到块状的结果。直接使用色调与RGB空间中的强度的解释不同。为了让我们重现您的错误,请将您试图产生这个块状结果的所有代码放入其中。@Divakar-我知道