欧莱雅官方网站的建设,有域名了怎么建设网站,网站的站点地图设计,百度智能小程序#xff08;1#xff09;HSV颜色模型#xff1a;HSV颜色模型#xff0c;又称为六角锥体模型#xff0c;以色调#xff08;H#xff09;、饱和度#xff08;S#xff09;、亮度#xff08;V#xff09;为基础#xff0c;能够更加自然地表现和处理颜色#xff0c;因… 1HSV颜色模型HSV颜色模型又称为六角锥体模型以色调H、饱和度S、亮度V为基础能够更加自然地表现和处理颜色因而在计算机视觉、图像处理领域得到了广泛应用。 2H表示色调用来表示颜色的种类。色调是人在视觉上区分颜色的一种方式类似RGB模型中的红、绿、蓝等基本颜色。色调通常用角度来表示0°红~120°绿~240°蓝~360°红色。 3S表示饱和度用来表示颜色的纯净度和鲜艳程度。当S1时表示颜色是最纯净的、最鲜艳的当S0时颜色变为灰色表示没有鲜明的色彩。 4V表示亮度用来表示颜色的明暗程度。当V1时表示颜色完全亮丽当V0时表示颜色完全暗淡即颜色为黑色。 5matlab代码实现
% 清空工作区和命令行窗口
clear;
clc;% 读取图像
input_path D:/FPGA/Image processing/8_rgb_hsv/matlab/1_1920x1080.bmp;
input_image imread(input_path);
[height, width, ~] size(input_image);% 检查图像尺寸
if height ~ 1080 || width ~ 1920error(输入图像必须是1920x1080像素);
end% 创建HSV图像和还原的RGB图像
hsv_image zeros(height, width, 3);
restored_rgb zeros(height, width, 3, uint8);% RGB转HSV
for y 1:heightfor x 1:widthR double(input_image(y,x,1));G double(input_image(y,x,2));B double(input_image(y,x,3));% 归一化到[0,1]r R/255;g G/255;b B/255;Cmax max([r g b]);Cmin min([r g b]);delta Cmax - Cmin;% 计算H (归一化到0-1)if delta 0H 0;elseif Cmax rH mod(((g-b)/delta), 6)/6;elseif Cmax gH ((b-r)/delta 2)/6;elseH ((r-g)/delta 4)/6;end% 确保H为正值if H 0H H 1;end% 计算Sif Cmax 0S 0;elseS delta/Cmax;end% 计算VV Cmax;% 存储HSV值 (已归一化到0-1)hsv_image(y,x,1) H;hsv_image(y,x,2) S;hsv_image(y,x,3) V;end
end% HSV转回RGB
for y 1:heightfor x 1:widthH hsv_image(y,x,1) * 6; % 转回0-6范围以便计算S hsv_image(y,x,2);V hsv_image(y,x,3);C V * S;X C * (1 - abs(mod(H, 2) - 1));m V - C;% 根据H的范围决定RGB值if H 0 H 1r C; g X; b 0;elseif H 1 H 2r X; g C; b 0;elseif H 2 H 3r 0; g C; b X;elseif H 3 H 4r 0; g X; b C;elseif H 4 H 5r X; g 0; b C;elser C; g 0; b X;end% 转换回[0,255]范围R round((r m) * 255);G round((g m) * 255);B round((b m) * 255);% 确保值在0-255范围内R min(max(R, 0), 255);G min(max(G, 0), 255);B min(max(B, 0), 255);restored_rgb(y,x,1) uint8(R);restored_rgb(y,x,2) uint8(G);restored_rgb(y,x,3) uint8(B);end
end% 显示原始图像、HSV图像和还原的RGB图像
figure(Name, Image Comparison);subplot(1,3,1);
imshow(input_image);
title(Original RGB Image);subplot(1,3,2);
imshow(hsv_image); % 现在可以直接显示因为值已经在0-1范围内
title(HSV Image);subplot(1,3,3);
imshow(restored_rgb);
title(Restored RGB Image);% 获取输入文件的目录路径
[filepath,~,~] fileparts(input_path);% 在相同目录下保存输出图像
imwrite(hsv_image, fullfile(filepath, output_hsv.bmp));
imwrite(restored_rgb, fullfile(filepath, output_restored_rgb.bmp));% 打开输出文件
output_path fullfile(filepath, output.txt);
fidc fopen(output_path, wb);% 将HSV数据写入文本文件
for y 1:heightfor x 1:width% 将0-1范围的HSV值转换为适合FPGA处理的定点数格式% 假设FPGA使用8位精度% H: 0-1 转换为 0-255% S: 0-1 转换为 0-255% V: 0-1 转换为 0-255H uint8(hsv_image(y,x,1) * 255);S uint8(hsv_image(y,x,2) * 255);V uint8(hsv_image(y,x,3) * 255);% 按HSV顺序写入三个字节fwrite(fidc, [H S V], uint8);end
end% 关闭文件
fclose(fidc);fprintf(已生成output.txt文件\n); 6FPGA实现RGB转HSV 由于H色调本来应该0°~360°如今映射到了0~255会有所损失。
(7)FPGA实现HSV转RGB 中间变量的精度真的很重要