HSI彩色图像空间滤波
来源:互联网 发布:javac找不到java文件 编辑:程序博客网 时间:2024/06/06 04:10
HSI彩色图像空间滤波
1、代码
%HSI彩色图像空间滤波clc;clear all;close all;disp('彩色图像空间滤波开始.......');%%%提取3个分量图像f=imread('0.jpg'); %加载彩色图像%显示原图像figure;imshow(f);title('彩色原图像');h=rgb2hsi(f); %rgb图像转化为HSIH=h(:,:,1); %提取H通道分量图像S=h(:,:,2); %提取S通道分量图像 I=h(:,:,3); %提取I通道分量图像%显示三通道图像figure;subplot(2,2,1);imshow(H);title('H');subplot(2,2,2);imshow(S);title('S');subplot(2,2,3);imshow(I);title('I');%%%分别过滤每个分量图像w = fspecial('average', 3);i_filter=imfilter(I,w,'replicate'); %平滑蓝色分量图像%显示滤波后的三通道图像figure;imshow(i_filter);title('I滤波后');%%%重建滤波后的RGB图像hsi=cat(3,H,S,i_filter);%构造多维数组,即合并3分量图像为一副彩色图像%显示重建后的图像figure;imshow(hsi);title('重建后');%%%hsi滤波后转化为RGBrgb=hsi2rgb(hsi);figure;imshow(rgb);title('滤波转RGB结果');
(2)函数rgb2hsi()定义
function hsi = rgb2hsi(rgb)% hsi = rgb2hsi(rgb)把一幅RGB图像转换为HSI图像,% 输入图像是一个彩色像素的M×N×3的数组,% 其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。% 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。% 输入图像可能是double(取值范围是[0, 1]),uint8或 uint16。%% 输出HSI图像是double,% 其中hsi(:, :, 1)是色度分量,它的范围是除以2*pi后的[0, 1];% hsi(:, :, 2)是饱和度分量,范围是[0, 1];% hsi(:, :, 3)是亮度分量,范围是[0, 1]。% 抽取图像分量rgb = im2double(rgb);r = rgb(:, :, 1);g = rgb(:, :, 2);b = rgb(:, :, 3);% 执行转换方程num = 0.5*((r - g) + (r - b));den = sqrt((r - g).^2 + (r - b).*(g - b));theta = acos(num./(den + eps)); %防止除数为0H = theta;H(b > g) = 2*pi - H(b > g);H = H/(2*pi);num = min(min(r, g), b);den = r + g + b;den(den == 0) = eps; %防止除数为0S = 1 - 3.* num./den;H(S == 0) = 0;I = (r + g + b)/3;% 将3个分量联合成为一个HSI图像hsi = cat(3, H, S, I);
(3)函数hsi2rgb()定义
function rgb = hsi2rgb(hsi)% rgb = hsi2rgb(hsi)把一幅HSI图像转换为RGB图像,% 其中hsi(:, :, 1)是色度分量,它的范围是除以2*pi后的[0, 1];% hsi(:, :, 2)是饱和度分量,范围是[0, 1];% hsi(:, :, 3)是亮度分量,范围是[0, 1]。%% 输出图像分量:% rgb(:, :, 1)为红;% rgb(:, :, 2)为绿;% rgb(:, :, 3)为蓝。% 抽取图像分量hsi = im2double(hsi);H = hsi(:, :, 1) * 2 * pi;S = hsi(:, :, 2);I = hsi(:, :, 3);% 执行转换方程R = zeros(size(hsi, 1), size(hsi, 2));G = zeros(size(hsi, 1), size(hsi, 2));B = zeros(size(hsi, 1), size(hsi, 2));% RG扇形(0 <= H < 2*pi/3)idx = find( (0 <= H) & (H < 2*pi/3));B(idx) = I(idx) .* (1 - S(idx));R(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx)) ./ ...cos(pi/3 - H(idx)));G(idx) = 3*I(idx) - (R(idx) + B(idx));% BG扇形(2*pi/3 <= H < 4*pi/3)idx = find( (2*pi/3 <= H) & (H < 4*pi/3) );R(idx) = I(idx) .* (1 - S(idx));G(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) - 2*pi/3) ./ ...cos(pi - H(idx)));B(idx) = 3*I(idx) - (R(idx) + G(idx));% BR扇形idx = find( (4*pi/3 <= H) & (H <= 2*pi));G(idx) = I(idx) .* (1 - S(idx));B(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) - 4*pi/3) ./ ...cos(5*pi/3 - H(idx)));R(idx) = 3*I(idx) - (G(idx) + B(idx));% 将3个分量联合成为一个RGB图像rgb = cat(3, R, G, B);rgb = max(min(rgb, 1), 0);
2、运行结果
0 0
- HSI彩色图像空间滤波
- HSI 彩色空间
- 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
- 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
- 彩色图像的空间域滤波
- 彩色图像空间滤波(MATLAB)
- 图像彩色空间
- 彩色图像空间【简介】
- 图像色彩空间之RGB与HSI
- 彩色图像--图像分割 彩色空间分割
- 图像空间域滤波
- 图像的RGB颜色空间和HSI空间的转换
- Python: scikit-image 彩色图像滤波
- 彩色图像--色彩空间 综述
- 彩色图像--色彩空间 总结
- 彩色图像和颜色空间
- 彩色图像--色彩空间 CMY(K)空间
- 图像复原 之 空间滤波
- PAT_乙级_1010
- java对象数组的增删练习之《学生信息管理系统》
- 直接选择排序
- 关于ValidationSummary,也就是mvc的客户端错误验证的理解
- 搜索起步—— Rectangle Split HihoCoder
- HSI彩色图像空间滤波
- 并查集
- 高质量代码有三要素:可读性、可维护性、可变更性
- Java多线程探究-线程同步
- json与map之间的互相转换
- Python获取脚本所在目录的正确方法
- Java网络编程(一):利用Java技术读取网页做一个简单爬网页上邮箱的网络蜘蛛
- 栈的链表实现
- bat批处理脚本教程