Matlab 制作图层混合测试图像
2023-09-11 14:22:04 时间
准备写一个 PS 中 27 种图层混合模式的 matlab 实现,需要用到测试图像,以验证混合效果,总结混合规律,主要包括颜色测试图像和亮度测试图像。
图像的制作参考了这篇博客,但由于技术能力有限,彩色图像的圆锥形渐变色带没能实现,只好用矩形代替了。
Matlab 代码
clear;close all;clc
h = 33; w = 11*60;
x1 = ones(h*2,w,3)*0;
x2 = ones(h*6,w,3).*(repelem(linspace(0,255,11),w/11));
x3 = ones(h*6,w,3).*(linspace(0,255,w));
x4 = ones(h*6,w,3).*(repelem(linspace(0,255,3),w/3));
X = [x1;x2;x3;x4];
figure;imshow(uint8(X))
imwrite(uint8(X),'luminosity.png')
y1= ones(h*4,w,3).*cat(3,[linspace(255,255,w/6),linspace(255,200,w/6),linspace(200,200,w/6),linspace(200,200,w/6),linspace(200,255,w/6),linspace(255,255,w/6)],...
[linspace(200,200,w/6),linspace(200,200,w/6),linspace(200,255,w/6),linspace(255,255,w/6),linspace(255,255,w/6),linspace(255,200,w/6)],...
[linspace(200,255,w/6),linspace(255,255,w/6),linspace(255,255,w/6),linspace(255,200,w/6),linspace(200,200,w/6),linspace(200,200,w/6)]);
y2 = ones(h*4,w,3).*cat(3,[linspace(255,255,w/6),linspace(255,0,w/6),linspace(0,0,w/6),linspace(0,0,w/6),linspace(0,255,w/6),linspace(255,255,w/6)],...
[linspace(0,0,w/6),linspace(0,0,w/6),linspace(0,255,w/6),linspace(255,255,w/6),linspace(255,255,w/6),linspace(255,0,w/6)],...
[linspace(0,255,w/6),linspace(255,255,w/6),linspace(255,255,w/6),linspace(255,0,w/6),linspace(0,0,w/6),linspace(0,0,w/6)]);
y3= ones(h*4,w,3).*0.4.*cat(3,[linspace(255,255,w/6),linspace(255,0,w/6),linspace(0,0,w/6),linspace(0,0,w/6),linspace(0,255,w/6),linspace(255,255,w/6)],...
[linspace(0,0,w/6),linspace(0,0,w/6),linspace(0,255,w/6),linspace(255,255,w/6),linspace(255,255,w/6),linspace(255,0,w/6)],...
[linspace(0,255,w/6),linspace(255,255,w/6),linspace(255,255,w/6),linspace(255,0,w/6),linspace(0,0,w/6),linspace(0,0,w/6)]);
y4 = ones(h*4,w,3).*cat(3,...
repelem([255,0,0],w/3),...
repelem([0,255,0],w/3),...
repelem([0,0,255],w/3));
y5 = ones(h*4,w,3).*(...
cat(3,repelem([0,255,255],w/3),...
repelem([255,0,255],w/3),...
repelem([255,255,0],w/3)));
Y = [y1;y2;y3;y4;y5];
figure;imshow(uint8(Y))
imwrite(uint8(Y),'color.png')
这里使用的比较多的一个函数是 repelem ,它可以把一个矩阵中的每个元素重复一定的次数,用该函数来实现色块效果。具体用法可以参考官网解释。
亮度图像很容易实现,RGB 取一样的值就是这种灰度效果了,然后从 0 到 255 按一定步长增大即可得到不同灰度级的图像。
颜色图的渐变色带制作需要研究一下颜色的分布规律,可以列一个 RGB 取值表
红 | 品红 | 蓝 | 青 | 绿 | 黄 | 红 | |
---|---|---|---|---|---|---|---|
R | 255 | 255 | 0 | 0 | 0 | 255 | 255 |
G | 0 | 0 | 0 | 255 | 255 | 255 | 0 |
B | 0 | 255 | 255 | 255 | 0 | 0 | 0 |
会发现,对于每一个颜色通道,都是连续 3 次 0 或者 255 ;并且相邻的颜色只会在某一个颜色通道发生跳变,因此这就是渐变发生的本质,让这些通道取值按照一定的步长逐渐增大,从而实现颜色混和。
对于浅色的色带,则是将 RGB 三通道中 取值为 0 的通道全部换为 200;
对于暗色的色带,则是将 RGB 三通道取值乘以一个 0 到 1 之间的小数(代码中取值为 0.4)。
效果预览
相关文章
- matlab 图像常用函数
- Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决
- matlab 泊松曲面重建法
- matlab 点云精配准(3)——Trimmed ICP
- 基于遗传算法优化BP神经网络的光伏出力预测研究(Matlab代码实现)
- 分布式光伏发电计及气象因子及出力预测方法研究(Matlab代码实现)
- 【配电网规划】SOCPR和基于线性离散最优潮流(OPF)模型的配电网规划( DNP )(Matlab代码实现)
- 基于节点导纳矩阵的三相配电系统建模(Matlab实现)
- 模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)
- Romberg算法(Matlab实现)
- 【MATLAB】求极限
- 【MATLAB】利用字符串模拟运算式
- 【MATLAB】取整和求余函数
- m基于MATLAB和simulink实现模糊控制器以及模糊神经网络控制器
- m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面
- 受限波尔茨曼机RBM_DBN深度学习网络训练和测试matlab仿真,数据库为随机数矩阵
- Matlab使用笔记(九):matlab实现交通流仿真/车感知/城市交通交叉路口
- Matlab:MATLAB GUI不同控件函数间变量传递的三种方法详解
- matlab测试标准DH与改进DH
- Matlab使用笔记(九):matlab实现交通流仿真/车感知/城市交通交叉路口