matlab中imshow(I,[low,high])的等效函数
在matlab中,imshow用于显示图像,而指令imshow(I,[low,high])是将原图像中灰度值小于等于low的像素点置灰度值为0,原图像中灰度值大于等于high的像素点置灰度值为255,其余通过特定的映射进行变换。
①初始以为这个特定的映射只是这样:在low和high之间的像素点的灰度值保留原值不变。故而采用如下等价函数验证:
function L = M_binaryzation(I,low,high )
%L = M_binaryzation(I,low,high )
% 这是imshow(I,[low,high])的等价函数
[row,col]=size(I);
L=uint8(zeros(row,col));
for i=1:row
for j=1:col
if I(i,j)>=high
L(i,j)=255;
elseif I(i,j)<=low
L(i,j)=0;
else
L(i,j)=I(i,j);%原灰度值映射
end
end
end
end
在工作空间上运行如下代码:
I=imread('cameraman.tif');
L=M_binaryzation(I,100,200);
figure(1);imshow(I,[100,200]);xlabel('imshow(I,[100,200])');
figure(2);imshow(L);xlabel('imshow(L)');
得到如下结果:
显然两幅图并不一致,故而,imshow(I,[low,high])里面的映射并非是直接使用原灰度值。
②考虑到一副灰度图像其一共可取有0-255共256个灰度值,而经过上述变换,只能取0,low~high,255一共N=high-low+1个灰度值(N<256),故而,可考虑这种映射是将low和high之间的灰度值映射到0~255这个空间上,使其可取256个灰度值。
如有一点的灰度值为105(设low=100,high=200),则映射到0~255上,该点的灰
255(105100)12200100-1度值为。
用如下等价函数验证:
function L = M_binaryzation(I,low,high )
%L = M_binaryzation(I,low,high )
% 这是imshow(I,[low,high])的等价函数
[row,col]=size(I);
L=uint8(zeros(row,col));
for i=1:row
for j=1:col
if I(i,j)>=high
L(i,j)=255;
elseif I(i,j)<=low
L(i,j)=0;
else
L(i,j)=floor((I(i,j)-low)*(255/(high-low-1)));%灰度空间扩展映射
end
end
end
end
在工作空间上运行如下代码:
I=imread('cameraman.tif');
L=M_binaryzation(I,100,200);
figure(1);imshow(I,[100,200]);xlabel('imshow(I,[100,200])');
figure(2);imshow(L);xlabel('imshow(L)');
得到如下结果:
显然,第②种映射方法得出来的图像结果与imshow(I,[100,200])的结果一致,
结论:imshow(I,[low,high])显示图像时是将原图像中灰度值小于等于low的像素点置灰度值为0,原图像中灰度值大于等于high的像素点置灰度值为255,其余通过特定的映射进行变换。映射方式是将low~high上的灰度值线性扩展到0~255内。