matlab 图像的扫描显示

在MATLAB中尝试图像的扫描显示时遇到问题,初始方法导致错误提示:TrueColor CData contains element out of range 0.0 <= value <= 1.0。通过查阅文档了解到,imread读取的8位图像数据需作为uint8数组处理,而非double。程序中定义的变量是double,导致不匹配。解决方案是将double数组转换为uint8。修正后的代码成功实现了逐行赋值并显示图像。

本以为MATLAB的图像扫描显示很简单,先创建一个三维数组A,全部赋值为255(显示为白色),然后读入图像数组B,将B的元素逐行赋值给A,每赋值一次,显示A一次,中间停顿0.01秒即可。想得简单,做起来必然复杂,程序完成后,提示:Error using ==> image
TrueColor CData contains element out of range 0.0 <= value <= 1.0。imshow()函数可以运行,但完全不是我想要的结果,百思不得其解,那是个崩溃啊。做了半天无用空,决定还是从MATLAB的文档看起,help image,选中doc image,看了一眼,立刻有所醒悟:
When you read image data into MATLAB using imread, the data is usually stored as an array of 8-bit integers. However, imread also supports reading 16-bit-per-pixel data from TIFF and PNG files. These are more efficient storage methods than the double-precision (64-bit) floating-point numbers that MATLAB typically uses. However, it is necessary for MATLAB to interpret 8-bit and 16-bit image data differently from 64-bit data. This table summarizes these differences.

Image TypeDouble-Precision Data
(double Array)8-Bit Data (uint8 Array)
true color (RGB)Image is stored as a three-dimensional(m-by-n-by-3 http://www.liangpinwu.com) array of floating-point values in the range [0, 1].Image is stored as a three-dimensional (m-by-n-by-3) array of integers in the range [0, 255] (uint8) or [0, 65535] (uint16).
回到命令行,输入whos回车,显示如下:

Name       Size                           Bytes  Class

  Img      140x102x3                        42840  uint8 array
  Img1     140x102x3                       342720  double array
  a          1x1                                8  double array
  b          1x1                                8  double array
  c          1x1                                8  double array
  i          1x1                                8  double array
  j          1x1                                8  double array
  k          1x1                                8  double array
  x          1x1                                8  double array

原来在程序里定义的变量都是 double array,而读入的图像却是uint8,ok,将double array转变为uint8即可,保存,运行,完全没有问题,现将程序源码附上,望有助于需要的朋友。

Img=imread('D:/Backup/我的文档/美景6.jpg');  %读入图像

x=size(Img,1);

for a=1:x
    for b=1:size(Img,2)
        for c=1:3
            Img1(a,b,c)=255;
           
        end
    end
end
Img1=uint8(Img1);          %将double array 转为 uint8
for i=1:x
    for j=1:size(Img,2)
        for k=1:3
           
    Img1(i,j,k)=Img(i,j,k);
  
end
    end

    image(Img1);          %显示图像


    pause(0.01);          %程序停留0.01秒
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值