matlab - matlab中图像的直方图拉伸(stretch)

标签 matlab image-processing histogram

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

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

但我得到了不同的结果 如何在不使用 imshow(img,[]) 的情况下拉伸(stretch)直方图 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,[])');

最佳答案

这可能是由于 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,因此,行之前拉伸(stretch)图像,您应该添加以下行:

img=double(img);

这样你就可以进行除法并保留数字。否则,您正在执行整数除法,因此 34/255=0

关于matlab - matlab中图像的直方图拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26545442/

相关文章:

python - scipys ndimage 过滤器的 "reflect"模式究竟是如何工作的?

给定分箱数据的python绘制简单直方图

matlab - matlab中检测物体的纹理分析统计、特征提取

matlab - 如何在不使用 for 循环的情况下对不同大小的矩阵的各个部分求和?

oop - MATLAB : Instantiate a class from an empty Instance to a 'Blank' Instance

c++ - 如果没有窗口,opencv cv::addText 异常

opencv - 如何在OpenCV中获得gabor核矩阵的实部和虚部

java - 如何设置JFreeChart.Histogram来对应数据

java - 如何显示图像的RGB值直方图?

visual-studio-2010 - matlab与visual studio的集成