当前位置: 首页 > news >正文

使用SOM进行图像颜色量化

使用SOM进行图像颜色量化

前言

自组织映射(Self-Organizing Map, SOM)是一种人工神经网络,能够将高维数据映射到低维空间,同时保持数据的拓扑结构。在图像处理领域,SOM常被用于颜色量化,即减少图像中的颜色数量,同时尽量保持图像的视觉效果。

本文将介绍如何使用MiniSom库实现基于SOM的图像颜色量化,将一幅图像的颜色从数百万种减少到9种代表色,同时保持图像的主要视觉特征。

编码实现

from minisom import MiniSom
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning)# ---------------------- 1. PNG图像加载与预处理 ----------------------
def load_and_preprocess_image(image_path):"""加载PNG图像并进行预处理"""# 加载PNG图像img = plt.imread(image_path).astype(np.float32)# 处理RGBA通道(若存在):保留RGB三通道if img.ndim == 3 and img.shape[-1] == 4:img = img[..., :3]# 自动判断位深度并标准化(适配8位/16位PNG)max_val = img.max()if max_val > 1.0:  # 非浮点型PNG(8位/16位)img = img / (65535 if max_val > 255 else 255)# 亮度增强(针对PNG可能的偏暗问题)img = np.clip(img * 1.5, 0, 1)return img# ---------------------- 2. SOM颜色量化 ----------------------
def som_color_quantization(img, grid_size=(3, 3), num_iterations=1000):"""使用SOM对图像进行颜色量化"""# 数据展平:将图像转为像素列表(每行一个RGB像素)pixels = img.reshape(-1, 3)# 初始化SOMsom = MiniSom(x=grid_size[0], y=grid_size[1], input_len=3,  # RGB三通道sigma=1.0, learning_rate=0.3, random_seed=42)# 随机初始化权重并保存初始状态som.random_weights_init(pixels)initial_weights = som.get_weights().copy()# 训练SOMsom.train_random(pixels, num_iterations)# 颜色量化quantized_pixels = som.quantization(pixels)quantized_img = quantized_pixels.reshape(img.shape)return quantized_img, initial_weights, som.get_weights()# ---------------------- 3. 结果可视化 ----------------------
def plot_results(original_img, quantized_img, initial_weights, learned_weights):"""可视化处理结果"""plt.figure(figsize=(12, 10))# 原始图像plt.subplot(221)plt.imshow(original_img)plt.title('Original Image')plt.axis('off')# 量化后图像plt.subplot(222)plt.imshow(quantized_img)plt.title('Quantized Image (9 colors)')plt.axis('off')# 初始权重颜色plt.subplot(223)plt.imshow(initial_weights)plt.title('Initial SOM Weights')plt.axis('off')# 学习后权重颜色plt.subplot(224)plt.imshow(learned_weights)plt.title('Learned SOM Weights')plt.axis('off')plt.tight_layout()plt.show()# ---------------------- 4. 主函数 ----------------------
def main():# 加载并预处理图像image_path = 'car.png'  # 请替换为您的图像路径img = load_and_preprocess_image(image_path)# 使用SOM进行颜色量化quantized_img, initial_weights, learned_weights = som_color_quantization(img)# 显示结果plot_results(img, quantized_img, initial_weights, learned_weights)if __name__ == "__main__":main()

原图片
在这里插入图片描述
结果
在这里插入图片描述

代码说明

  1. 图像预处理

    • 支持RGBA和RGB格式的PNG图像
    • 自动适配8位和16位PNG图像的位深度
    • 包含亮度增强功能,改善PNG图像可能的偏暗问题
  2. SOM训练

    • 使用3x3的SOM网格,将颜色量化为9种代表色
    • 训练1000次以确保充分拟合图像的颜色分布
    • 保存初始权重和学习后的权重用于对比
  3. 结果可视化

    • 展示原始图像和量化后的图像
    • 对比SOM初始权重和学习后的权重变化
    • 清晰展示颜色量化的效果

使用方法

  1. 确保安装了必要的库:
pip install minisom numpy matplotlib
  1. 将代码中的image_path替换为您的图像路径

  2. 运行代码,即可看到颜色量化的效果

这种基于SOM的颜色量化方法能够有效地减少图像中的颜色数量,同时保持图像的主要视觉特征,适用于图像压缩、色彩分析等应用场景。

http://www.dtcms.com/a/605446.html

相关文章:

  • map的遍历
  • 百度站内搜索永久域名查询
  • 【Java Web学习 | 第九篇】JavaScript(3) 数组+函数
  • MANUS 数据手套:手部跟踪工作流程指南
  • Qt的信号槽机制是线程安全的吗?
  • Go语言编译:深入了解Go编译原理与性能优化 | 探索Go编译器背后的工作原理及性能提升技巧
  • Unity为什么推荐在FixedUpdate处理物理模拟?
  • 鄂城网站建设大连网站建设哪个公司好
  • 上海专业网站建设渠道用帝国cms做视频网站
  • RocketMQ消费组详解:构建高可用消息消费系统
  • leetcode 63 不同路径II
  • 网站的当前位置导航如何做免费域名注册免费空间
  • 研发管理知识库(12)阿里“云效”使用方案简介
  • 中文共情对话数据集2023年和2025年
  • 如何制作网站的步骤网店美工的作用
  • 网站标ico怎么做苏州seo推广公司
  • springboot实现跨服务调用/springboot调用另一台机器上的服务
  • 代价复杂度剪枝(CCP)详解:原理、实现与应用
  • 温州微网站公司看网红直播做爰的网站
  • Katalon Studio的功能介绍
  • 电子商务公司的经营范围企业seo关键词优化
  • 定义 LLM 格局:开源与闭源两大阵营的较量
  • 数智化时代:AI技术重构企业财务管理系统的底层逻辑与实践
  • 阿里“千问”破局C端AI:开源基石与B端势能的双重革命
  • 从生成内容角度介绍开源AI大模型
  • 碳中和终极武器——嵌入式AI重构能源管理战局
  • RikkaHub 1.6.11 | 开源的本地大型语言模型聚合应用,支持多种AI服务提供商
  • 企业网站及公众号建设方案河南郑州解封通知
  • ios包体积管理方案
  • 邵阳网站优化中国建设劳动学会监制网站