Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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 imshow/imwrite将所有像素值更改为1_Matlab_Octave_Image Preprocessing_Octave Gui - Fatal编程技术网

Matlab imshow/imwrite将所有像素值更改为1

Matlab imshow/imwrite将所有像素值更改为1,matlab,octave,image-preprocessing,octave-gui,Matlab,Octave,Image Preprocessing,Octave Gui,我有一个用.mat保存的Matlab数据集,我正试图在Octave GUI中处理它。数据由图像组成,我希望以JPG格式(或任何其他图像格式)保存它们,但在尝试显示或写入图像时,我有这种奇怪的行为。 这是图像的一部分显示为数组的方式: 91 90 91 88 93 88 91 86 81 88 93 100 90 85 91 93 100 94 93 96 87

我有一个用
.mat
保存的Matlab数据集,我正试图在Octave GUI中处理它。数据由图像组成,我希望以JPG格式(或任何其他图像格式)保存它们,但在尝试显示或写入图像时,我有这种奇怪的行为。 这是图像的一部分显示为数组的方式:

    91    90    91    88    93
    88    91    86    81    88
    93   100    90    85    91
    93   100    94    93    96
    87    87    87    87    89
但是当我写这个图像的时候

imwrite(img,'D:\image\u test\u 1.jpg')

再读一遍

img\u read=imread('D:\image\u test\u 1.jpg')

我的结论是:

  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
我试图寻找原因,但没有找到一个明确的答案或澄清这个问题。即使在使用
imshow
显示图像时,我也会得到一张空白图像

所有像素值发生了什么变化?

配置为
uint8
Image 要指示此图像使用的是8位比例/格式,我们可以将数组强制转换为
uint8()
(无符号8位整数)。此格式将假定强度值的范围为0到255(典型的JPG格式)。我认为数组显示为1s的原因是Octave试图将数组解析为从0到1的双精度数组。因此,由于
图像
/
img
阵列的所有强度值超出范围(最大值超出),因此阵列的结果达到了1的上限。或者,我们可以使用
im2double()
函数将数组转换为double,或者将原始数组除以255


使用MATLAB R2019b运行

运行正常!非常感谢你的准确回答!没问题,很乐意帮忙。还有一个问题:)。我发现我可以在这里指定t图像的质量。但当我设置质量值时,我有一个错误。你知道为什么吗?谢谢,这听起来像是一个单独的问题。@salRad
imwrite(Image,'D:\Image\u test\u 1.jpg','Quality',20)
似乎在MATLAB上对我有用。
Image = [91  90  91  88  93; 
         88  91  86  81  88;
         93  100 90  85  91;
         93  100 94  93  96;
         87  87  87  87  89];

Image = uint8(Image);

imwrite(Image, 'D:\image_test_1.jpg')
imshow(imread('D:\image_test_1.jpg'),'InitialMagnification','fit');