Matlab 制作图层混合测试图像

Posted GShang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab 制作图层混合测试图像相关的知识,希望对你有一定的参考价值。

准备写一个 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\')

这里的渐变色带制作需要研究一下颜色的分布规律,可以列一个 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 ,为了制造颜色渐变过渡效果,让这些数值在按照一定的步长逐渐增大,实现颜色混和。

效果预览

亮度测试

颜色测试

以上是关于Matlab 制作图层混合测试图像的主要内容,如果未能解决你的问题,请参考以下文章

悬停时如何在图像上添加具有多重混合模式的图层?

混合图层图像Android上的触摸事件

图像去噪基于空间光谱总变化减少高光谱图像的混合噪声(Matlab代码实现)

OpenGL 多纹理混合

神奇的CSS3混合模式

如何从混合图像中取消混合两个图像