图像处理-MATLAB中RGB图像转HSI图像的源代码,并图像分割

问题描述

MATLAB中RGB图像转HSI图像的源代码,并图像分割

MATLAB中RGB图像转HSI图像的源代码
并分别对HSI中3个分量(H/S/I)进行图像分割
给我,能运行的M文件
在线等,急急急急急!!!!!!!!!!!

解决方案

 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);
%hsi = H;    %分别返回3个分量
%hsi = S;
%hsi = I;

时间: 2025-01-02 07:07:46

图像处理-MATLAB中RGB图像转HSI图像的源代码,并图像分割的相关文章

图像处理-matlab中怎么检测一幅二值图中的线是直线还是曲线?

问题描述 matlab中怎么检测一幅二值图中的线是直线还是曲线? 一幅二值图中有几条线,怎么判断出它是直线还是曲线? 解决方案 有没有误差范围delta?

图像处理 matlab HSI RGB 颜色失真

问题描述 图像处理 matlab HSI RGB 颜色失真 用Matlab对RGB图像的三颜色通道R,G,B个自做一些运算后得到R1,G1,B1,然后运行I1=cat(3, R1,G1,B1); I2=uint8(I1)得到的图像颜色很正常,而我先将RGB转换到HIS,对H,S,I三通道各自进行一些运算后,得到新的H1,S1,I1,再运行I3=cat(3, H1,S1,I1); I4=uint8(I3),再转换到RGB,I5= hsi2rgb(I4),得到的图片颜色失真.效果如我上传的这张一样,

图像卷积、相关以及在MATLAB中的操作

图像卷积.相关以及在MATLAB中的操作 2016年7月11日 20:34:35, By ChrisZZ 区分卷积和相关 图像处理中常常需要用一个滤波器做空间滤波操作.空间滤波操作有时候也被叫做卷积滤波,或者干脆叫卷积(离散的卷积,不是微积分里连续的卷积):滤波器也有很多名字:卷积模版.卷积核.掩模.窗口等. 空间滤波可以分为线性滤波和非线性滤波.非线性滤波常见的有中值滤波.最大值滤波等,相当于自定义一个函数,在数学上由于不满足线性变换因此叫做非线性滤波.这里不细研究它. 线性滤波则通常是:将模

如何把CorelDraw中RGB模式图像一次转成CMYK模式

问:如何把CorelDraw中RGB色彩模式的图像一次转成CMYK模式? 答:解决方法如下: 1.CorelDraw增强版中包含直接转CMYK插件或去网上下载专用的转换补丁. 2.另外一方法就是全选图形,一次性转换成CMYK模式的点阵图. 3.输出四色独立PS文件 4.CorelDraw 13包含一次性转CMYK插件宏.也可以把这个宏复制到CD12.11中使用. 5.利用替换与取代来实现RGB色彩到CMYK色彩的转变,但填充与轮廓色不能一次性转换,需要转两次, 如果有RGB位图,还要再转一次.

紧急求助!将matlab中生成的图像传递给.net对象?

问题描述 现在使用C#调用matlab编译的.netassembly程序集,目前实现的功能是,在matlab中生成了图片并保存到了剪粘板,代码如下:h_fig=figure('Visible','off');plot(x,y);%你的画图语句print(gcf,'-dmeta');%保存到剪贴板,emf图像格式close(h_fig);%关闭figure,清空内存然后在.net中从剪粘板得到图像,这样会有两个个问题:1.破坏了剪粘板中原有的数据2.不能并发执行各位高手能否解决将matlab中生成

图像处理-求计算图像标准差,图像对比度和图像清晰度的Matlab程序

问题描述 求计算图像标准差,图像对比度和图像清晰度的Matlab程序 1,图像标准差:2,图像对比度:3,图像清晰度 上述三个问题的Matlab程序 解决方案 图像清晰度 解决方案二: http://www.61ic.com/FPGA/Altera/201307/49502.html

matlab如何一次性显示多张图像

问题描述 matlab如何一次性显示多张图像 刚接触matlab一个星期,接触的新领域做图像处理,怎么一次性显示多张图片,不是一个figure显示多张,而是一张图片对应一个figure,但要多张连续显示出来 解决方案 matlab 图像的扫描显示matlab图像显示matlab中数据类型及图像显示 解决方案二: figure hold on figure hold on 解决方案三: subplot(2,2,1);跟画图语句如plot() subplot(2,2,2);跟画图语句如plot()

【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解

       本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形旋转.图像反转倒置镜像和图像缩放的知识.同时文章比较详细基础,没有采用GDI+获取矩阵,而是通过读取BMP图片信息头和矩阵像素实现变换,希望该篇文章对你有所帮助,尤其是初学者和学习图像处理的学生.        [数字图像处理]一.MFC详解显示BMP格式图片        [数字图像处理]二.

fastmaching-ITK中level set分割序列图像问题

问题描述 ITK中level set分割序列图像问题 尝试用ITK中examples中的fastmarching方法分割图像,在单张的DICOM图像上分割没有问题,可是怎么样衍生到CT序列图像中啊,直接读入DICOM序列图像分割好像行不通啊,有没有高手大神帮忙解答一下,万分感谢