我正在尝试使用以下公式实现函数 imshow(img,[])
对于每个像素:
(img(x,y)-min(img))/(max(img)-min(img))*255
但我得到了不同的结果
如何在不使用 imshow(img,[]) 的情况下拉伸(stretch)直方图
tnx
代码:
IAS=input('please enter image address','s');
Iimg=imread(IAS);
stimg=(Iimg-min(Iimg(:)))/(max(Iimg(:))-min(Iimg(:)))*255;
subplot(1,3,1)
imshow(stimg);
title('strechself');
subplot(1,3,2)
imshow(Iimg);
title('original image');
subplot(1,3,3)
imshow(Iimg,[])
title('imshow(img,[])');
最佳答案
这可能是由于 max
和 min
使用错误造成的。
您正在执行 min(img)
,这将为您提供每行最小值的数组。如果你想要整个图像的绝对最小值,你应该调用 min(img(:))
因此,将您的行更改为:
img=(img-min(img(:)))/(max(img(:))-min(img(:)))*255
请注意,它只有 1 行。在 Matlab 中,您不需要像其他语言那样访问每个像素 (img(x,y)
) 并独立更改,您可以直接执行此操作。
此外,如果 img 不是 uint8
,我建议你制作它(因为你使用的是 0-255 比例)
img=uint8(img);
编辑:看看你的结果,很可能你的原始图像是一个uint8
,因此,在行之前拉伸(stretch)图像,您应该添加以下行:
img=double(img);
这样你就可以进行除法并保留数字。否则,您正在执行整数除法,因此 34/255=0
关于matlab - matlab中图像的直方图拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26545442/