HSI彩色图像空间滤波
2017-04-11 13:39
239 查看
HSI彩色图像空间滤波
1、代码
(2)函数rgb2hsi()定义
(3)函数hsi2rgb()定义
2、运行结果
1、代码
%HSI彩色图像空间滤波 clc; clear all; close all; disp('彩色图像空间滤波开始.......'); %% %提取3个分量图像 f=imread('0.jpg'); %加载彩色图像 %显示原图像 figure;imshow(f);title('彩色原图像'); h=rgb2hsi(f); %rgb图像转化为HSI H=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滤波后转化为RGB rgb=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)); %防止除数为0 H = 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; %防止除数为0 S = 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、运行结果
相关文章推荐
- 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
- 彩色图像的空间域滤波
- 彩色图像空间滤波(MATLAB)
- 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
- 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
- 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)
- 颜色空间,图像格式,彩色转灰度函数
- 彩色图像空间【简介】
- 图像直方图均衡化和空间滤波
- 彩色图像和颜色空间
- 【图像处理】从图像空间域滤波到频域滤波
- 彩色图像--色彩空间 总结
- 【数字图像处理】[4]--空间平滑滤波
- 彩色图像从RGB色彩空间转换到Lab色彩空间
- opencv实现将RGB图像转换到HSI空间
- openCV—Python(7)—— 彩色图像R、G、B分量的提取与合并及其相关颜色空间的转化
- 彩色图像--色彩空间 综述
- 基于CIELab空间色彩K-means聚类彩色图像分割
- 图像空间域滤波
- 图像色彩空间之RGB与HSI