在matlab中拉伸图像的直方图

时间:2014-10-24 09:43:10

标签: matlab image-processing histogram

我正在尝试使用以下公式实现函数imshow(img,[]) 对于每个像素:

(img(x,y)-min(img))/(max(img)-min(img))*255  

但我得到了不同的结果 如何在不使用imshow(img,[])的情况下拉伸直方图 TNX

enter image description here

代码:

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,[])');

1 个答案:

答案 0 :(得分:3)

可能是由于错误地使用了maxmin

您正在执行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