zoukankan      html  css  js  c++  java
  • 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')
    

    这里使用的比较多的一个函数是 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)。

    效果预览

    亮度测试

    颜色测试

    © 版权声明
    文章版权归作者所有,未经允许请勿转载。
  • 相关阅读:
    python之----------字符编码具体原理
    css部分复习整理
    秘钥登录服务器执行shell脚本
    idea配置github
    InteliJ IDEA 简单使用:配置项目所需jdk
    IntelliJ IDEA 中安装junit插件
    IDEA 运行maven命令时报错: -Dmaven.multiModuleProjectDirectory system propery is not set
    idea如何编译maven项目
    idea项目左边栏只能看到文件看不到项目结构
    idea如何导入一个maven项目
  • 原文地址:https://www.cnblogs.com/gshang/p/14878537.html
Copyright © 2011-2022 走看看