imread(img),读取保存的数据是unit8类型的。im2double(img)处理的数据全是[0,1]之间的。在matlab中为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8变为double。
imshow函数显示图像时对double型会认为0~1范围内,即大于1都显示为白色,而imshow显示unit8时是0~255范围。
imwrite同。 解决:
imshow(I/255).............将图像矩阵转化到0-1之间
imshow(I,[ ])...........将图像矩阵I的最大值和最小值分别作为纯白255和纯黑0,之间的I值映射为0-255之间的标准灰度值
从实验结果看,两种方法都解决了问题,但从显示的图像看,第二种方法的明暗黑白对比强烈些
如果空矩阵 ([]) 来代替 [low high], imshow 函数将使用 [min(I(:))max(I(:))]作为第二个参数。
若希望将0-65535的灰度级映射到0-255上,则可采用以下的办法:
uint8(double(number)/65535*255)
把图像I1转换成double精度类型(假设图形矩阵范围0~255)
I2=im2double(I1) 或 I64=double(I8)/255; %uint转换成double
如果矩阵复合数据图像标准(0~1之间),
I3=im2uint8(I2) %把矩阵I2转换成uint8类型
如果超出0~1范围,就要用uint8()
I8=uint8(round(I64*255)); %double转换成uint8 自动切割0-255
或 I3=mat2gray(I2) &把矩阵转化为灰度图像格式double
complex_data = double(full_data(:,:,1)) + i*double(full_data(:,:,2));
level 4 开始 矩阵超出索引维度