我正在尝试使用以下公式实现函数imshow(img,[])
对于每个像素:
(img(x,y)-min(img))/(max(img)-min(img))*255
但我得到了不同的结果
如何在不使用imshow(img,[])
的情况下拉伸直方图
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,[])');
答案 0 :(得分:3)
可能是由于错误地使用了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
,因此 之前拉伸图片的行,你应添加以下行:
img=double(img);
所以你可以划分并保留数字。否则,您正在执行整数除法,因此34/255 = 0