matlab 图像灰度级转[0,1], Normalize处理, 提升/降低所有元素若干倍, .^的运用(点乘与乘)

来源:互联网 发布:芭比娃娃淘宝 编辑:程序博客网 时间:2024/05/18 01:32

声明:笔者关于matlab主题的帖子内容均来自于课堂作业,课堂笔记以及自己在学习过程中查询matlab官方文档获得的学习经验,分享到CSDN一方面是作为自己的学习笔记,另一方面希望可以帮助到和我一样的初学者。题目来自于笔者在美帝学习CS的作业,代码属于笔者原创,转载请注明出处,禁止抄袭。哈哈说的有点严重是因为内容来自美帝课堂,为了博主不被遣返,希望各位看官理解。


题目:

1. 把灰度图像B转换成C,要求把B中的元素的值normalize到[0,1],也就是说B中原来最大的值变成1,C要求是double类型

2. 把C的左1/4列所有元素变成原来的1.25倍,中间两个1/4不变,右边1/4变成1.25倍。

3. 不允许使用循环


代码:

MaxValue = double(max(max(B)));C = double(B)/maxValue;figure(3);imshow(C)title('Normalized Grayscale Image')oriD1 = C(:,1:col/4);D1 = oriD1.^0.75;D2 = C(:,col/4+1:3*col/4);oriD3 = C(:,3*col/4+1:col);D3 = oriD3.^1.25;D = [D1,D2,D3];figure(4);imshow(D)title('Processed Grayscale Image')

值得注意的地方:

1. 要求把B最大元素变成1,也就是说将原矩阵整体除以B的最大值。要注意在做除法前要把B转成double类型,因为图像读入时默认一般是uint8类型,如果这里的B是uint8的话,每个元素除以最大值的结果是一片0,C是黑色的一坨。


2. 将一个大矩阵分成几部分可以使用冒号,例如我在截取左1/4的时候oriD1 = C(:,1:col/4); 这句话是说截取C中1到col/4列的所有行的元素。


3. 提升或者降低某个矩阵所有元素的灰度级可以使用./和.^来处理。

    比如D1 = oriD1.^0.75; 这句话是说把oriD中的所有元素变成原来灰度级的0.75倍。

    注意要使用.^不要忽略了这个. 因为.^和^是不一样的

    不加点的^是矩阵乘法,也就是在线性代数课程中学习过的普通矩阵相乘的矩阵乘法,要求前一个矩阵的列数等于后一个矩阵行数;

    加点的.^是数组运算,是点乘,也就是说前后俩矩阵对应的元素分别相乘。


运行结果:




原创粉丝点击