作者:傻瓜等傻子 | 来源:互联网 | 2023-10-10 18:51
声明:笔者关于matlab主题的帖子内容均来自于课堂作业,课堂笔记以及自己在学习过程中查询matlab官方文档获得的学习经验,分享到CSDN一方面是作为自己的学习笔记,另一方面希望可以帮助到和我
声明:笔者关于matlab主题的帖子内容均来自于课堂作业,课堂笔记以及自己在学习过程中查询matlab官方文档获得的学习经验,分享到CSDN一方面是作为自己的学习笔记,另一方面希望可以帮助到和我一样的初学者。题目来自于笔者在美帝学习CS的作业,代码属于笔者原创,转载请注明出处,禁止抄袭。哈哈说的有点严重是因为内容来自美帝课堂,为了博主不被遣返,希望各位看官理解。
题目:
自定义一个Scaling函数区实现如下功能:将原图的灰度值范围规范到用户指定的范围,并绘制转换方程的图像。
函数原型为:function [scaledIm, transFunc] = Scaling(inputIm, range)
其中:inputIm为输入的图像,range为指定的灰度值新范围。scaledIm为处理后的图像,transFunc为一个包含n个元素的行或列向量,n为原图像的灰度值的最大值-最小值+1(即原图灰度值范围),该向量的第一个元素应该是新图像灰度值的最小值,最后一个元素为新图像的灰度值的最大值。
要求:1.输入和输出的图像都是uint8类型。2. 对用户输入的范围作有效性验证,如果不符合(0,255)要给出错误提示。
举例说明:
为了方便理解这个题目要做的事情是什么,博主这里贴出自己举的例子。
代码实现:
function [scaledIm, transFunc] = Scaling(inputIm, range)
scaledIm = inputIm;
[row, col] = size(inputIm); % get the size
% get the input range
rangeLow = double(range(1));
rangeHigh = double(range(2));
% Determine if the input range is valid
% If not valid, return
if rangeLow<0 || rangeHigh>255 || rangeLow>255 || rangeHigh<0 || rangeLow>rangeHigh
disp('Out of range! Range is between 0 and 255');
return;
end
% get the max, min and range of inputIm
maxIm = double(max(max(inputIm)));
minIm = double(min(min(inputIm)));
% n is the original range of max and min, used to cpmpute the transform function
n = maxIm - minIm + 1;
% calcaulate the slope and constant of transformation function
% y = kx + b
k = ( rangeHigh - rangeLow )/( maxIm - minIm );
b = rangeHigh - maxIm * k;
% Transform inputIm to scaledIm
for i = 1 : row
for j = 1 : col
scaledIm(i,j) = uint8( k * double(inputIm(i,j)) + b);
end
end
% Display vector transfunc
transFunc = zeros(1,n);
for i = 1 : n
transFunc(i) = (minIm + i - 1) * k + b ;
end
主函数为:
[scaledFood,transFunc] = Scaling(food,[0 255]);
figure(1);
subplot(1,2,1);imshow(scaledFood);title('Scaled food');
subplot(1,2,2);plot(transFunc);
xlabel('orignal value');
ylabel('transfered value');
运行结果:
这里是规范化之前的原图,可以看到明显的区别。