Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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

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并返回_Matlab_Image Processing_Rgb_Steganography_Indexed Image - Fatal编程技术网

Matlab 在不丢失数据的情况下,将索引图像转换为RGB并返回

Matlab 在不丢失数据的情况下,将索引图像转换为RGB并返回,matlab,image-processing,rgb,steganography,indexed-image,Matlab,Image Processing,Rgb,Steganography,Indexed Image,我无法将索引图像转换为RGB,然后再从RGB转换回索引图像。由于某些原因,结果与原始结果不同。我正在做隐写术,所以如果数据被更改,它就无法工作 这是我的代码,这是示例图像: 变量J和Jind应该相等。为什么会检测到它们不同?首先,我确信这与 发生此问题的原因是,如果您实际查看加载图像的颜色映射: map = 0 0 0 0.6275 0.3216 0.1765 0.4902 0.4902 0.4902 0.80

我无法将索引图像转换为RGB,然后再从RGB转换回索引图像。由于某些原因,结果与原始结果不同。我正在做隐写术,所以如果数据被更改,它就无法工作

这是我的代码,这是示例图像:


变量
J
Jind
应该相等。为什么会检测到它们不同?

首先,我确信这与

发生此问题的原因是,如果您实际查看加载图像的颜色映射:

map = 
       0         0         0
  0.6275    0.3216    0.1765
  0.4902    0.4902    0.4902
  0.8039    0.5216    0.2471
  0.7451    0.7451    0.7451
  0.8627    0.8627    0.8627
  0.9020    0.9020    0.9804
       0         0         0
您将看到黑色(0,0,0)实际上存在于其中两次,因此index=0和index=7将在RGB图像中解析为黑色

当您转换回索引图像时,MATLAB将对这两个图像使用相同的索引(因为它们显然是相同的颜色),即使传递给
rgb2ind
的颜色贴图是相同的颜色贴图

这就解释了为什么你所看到的差异是透明像素所在的位置(周围)

至于处理这个问题,我觉得有点棘手。不幸的是,
imread
的透明度(第三输出)输出是一个空数组

您可以潜在地更改输入颜色映射,使第一行和最后一行不相同(将最后一行设置为1),然后您应该返回可比较的内容

map(end,:) = 1;
rgb = ind2rgb(J, map);
ind = rgb2ind(rgb, map);
isequal(J, ind);

一般来说,由于MATLAB的局限性,具有透明性的GIF可能不是使用速记的最佳测试用例。

首先,我确信这与

发生此问题的原因是,如果您实际查看加载图像的颜色映射:

map = 
       0         0         0
  0.6275    0.3216    0.1765
  0.4902    0.4902    0.4902
  0.8039    0.5216    0.2471
  0.7451    0.7451    0.7451
  0.8627    0.8627    0.8627
  0.9020    0.9020    0.9804
       0         0         0
您将看到黑色(0,0,0)实际上存在于其中两次,因此index=0和index=7将在RGB图像中解析为黑色

当您转换回索引图像时,MATLAB将对这两个图像使用相同的索引(因为它们显然是相同的颜色),即使传递给
rgb2ind
的颜色贴图是相同的颜色贴图

这就解释了为什么你所看到的差异是透明像素所在的位置(周围)

至于处理这个问题,我觉得有点棘手。不幸的是,
imread
的透明度(第三输出)输出是一个空数组

您可以潜在地更改输入颜色映射,使第一行和最后一行不相同(将最后一行设置为1),然后您应该返回可比较的内容

map(end,:) = 1;
rgb = ind2rgb(J, map);
ind = rgb2ind(rgb, map);
isequal(J, ind);

一般来说,由于MATLAB的局限性,具有透明性的GIF可能不是玩速记的最佳测试用例。

谢谢你的回答,但我有这个。它没有透明度,颜色贴图是唯一的,为什么在转换为rgb并返回索引后它们仍然不同?@Fitri您使用什么来生成这些图像?
[J map]=imread('RoFox.gif');[彩色边框]=尺寸(J);对于i=1:帧Jrgb(:,:,:,i)=ind2rgb(J(:,:,:,i),map);Jind(:,:,:,i)=rgb2ind(Jrgb(:,:,:,i),map);结束
当我检查i=1:frame isequal(Jind(:,:,:,i),J(:,:,:,i))时,结束为什么它们不相等?@Fitri我完全明白这是一个问题。我只是想弄清楚输入数据是用什么创建的,也许可以做更多的调试。谢谢你的回答,不过我有这个。它没有透明度,颜色贴图是唯一的,为什么在转换为rgb并返回索引后它们仍然不同?@Fitri您使用什么来生成这些图像?
[J map]=imread('RoFox.gif');[彩色边框]=尺寸(J);对于i=1:帧Jrgb(:,:,:,i)=ind2rgb(J(:,:,:,i),map);Jind(:,:,:,i)=rgb2ind(Jrgb(:,:,:,i),map);结束
当我检查i=1:frame isequal(Jind(:,:,:,i),J(:,:,:,i))时,结束为什么它们不相等?@Fitri我完全明白这是一个问题。我只是想弄清楚输入数据是用什么创建的,也许可以进行更多的调试。