图像在不同的色彩空间可以表现出不同的光谱特性,从而适用于不同的应用场合。在 HSV 色彩空间中,阴影在色度和饱和度通道中都与非阴影区域有明显的区别。根据阴影的这种特性,利用连续两次的 HSV 彩色空间变换,可以在图像中有效的区分出阴影与非阴影区域。

一、Otsu阈值算法(Otsu.m)

%利用大津法(Ostu)计算阈值

%{

大津法由大津于1979年提出,对图像Image,记t为前景与背景的分割阈值,前景点数占图像

比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。

图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,

当t使得值g=w0*(u0-u)2+w1*(u1-u)2 最大时t即为分割的最佳阈值。

对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成

了整幅图像,而前景取值u0,概率为 w0,背景取值u1,概率为w1,总均值为u,根据方差的

定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差

别越大, 当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此使类

间方差最大的分割意味着错分概率最小。

%}

%Matlab实现大津法计算阀值

function threshold = Otsu(grayImage)

%取出最大灰度值,max只能找到每一列的最大值

maxGrayValue = max(max(grayImage));

%取出最小灰度值

minGrayValue = min(min(grayImage));

%求初始阀值

t = double(minGrayValue:maxGrayValue);

%图像大小

gsize = size(grayImage);

%图像像素总个数

muxsize = gsize(1)*gsize(2);

for k = 1:length(t)

%从最小灰度值到最大值的计算方法

tk = t(1,k);

%定义前景和背景像素数

iforeground = 0;

ibackground = 0;

%定义前景和背景的灰度总和

foreground = 0;

background = 0;

for i = 1:gsize(1)

for j = 1:gsize(2)

tmp = grayImage(i,j);

if(tmp >= tk)

%前景灰度值

iforeground = iforeground + 1;

foreground = foreground + double(tmp);

else

%背景灰度值

ibackground = ibackground + 1;

background = background + double(tmp);

end

end

end

w0 = iforeground / muxsize;

w1 = ibackground / muxsize;

u0 = foreground / iforeground;

u1 = background / ibackground;

t(2,k) = w0*w1*(u0-u1)*(u0-u1);

end

%遍历后寻找grayIamge的第二行的最大值

%第二行方差的最大值,忽略NaN

omax = max(t(2,:));

%方差最大值所对应的列号,find只能检查一行中的数,或一维数组

index = find(t(2,:) >= omax);

%从第一行取出灰度值作为阀值

t = t(1,index);

threshold = t;

二、阴影检测(ShadowDetection.m)

%清理窗口

close all

clear all

clc

%读取图像

img_name = input('请输入图像名字:','s');

I = imread(img_name);

J = I;

%第一次色彩空间变换

h = rgb2hsv(J);

%获得图像大小

[m n] = size(J(:,:,1));

%将变换后的图像的HSV值规范至[0,255]范围内

for i = 1:m

for j = 1:n

for k = 1:3

J(i,j,k) = int8(255*h(i,j,k));

end

end

end

%第二次色彩空间变换

h=rgb2hsv(J);

%再次将变换后的图像的HSV值规范至[0,255]范围内

for i = 1:m

for j = 1:n

for k = 1:3

J(i,j,k) = int8(255*h(i,j,k));

end

end

end

%将RGB图像转化为灰度图像

gray = J(:,:,1);

%利用Otsu阈值检测法取图像二值化阈值

t = Otsu(gray);

%根据阈值将图像二值化

for i = 1:m

for j = 1:n

if gray(i,j) < t

gray(i,j) = 255;

else

gray(i,j) = 0;

end

end

end

%利用闭运算去除噪声

bim=im2bw(gray);

SE=strel('arbitrary',eye(5));

BW2=imclose(bim,SE);

%显示原始图像

imshow(I);

title('原始图像');

%最终结果

figure,imshow(BW2);

title('阴影检测结果');

hsv空间阈值检测matlab,基于HSV色彩空间变换的阴影检测算法——MATLAB实现相关推荐

  1. 五种基于RGB色彩空间统计的皮肤检测算法

    最近一直在研究多脸谱识别以及如何分辨多个皮肤区域是否是人脸的问题 网上找了很多资料,看了很多篇文章,将其中基于RGB色彩空间识别皮肤 的统计算法做了一下总结,统计识别方法主要是简单相比与很多其它基于 ...

  2. Matlab 基于遗传算法优化的VMD信号去噪算法 创新点:基于样本熵作为适应度函数

    Matlab 基于遗传算法优化的VMD信号去噪算法 创新点:基于样本熵作为适应度函数 创新点2:基于信噪比作为适应度函数 提高信噪比 本人研究方向信号处理特征提取与故障诊断算法 ID:34506686 ...

  3. 【火灾检测】基于HSV特征实现火灾检测附matlab代码

    1 简介 针对传统火灾监测系统对于大空间的室内场合和开阔的室外环境易失效的问题,提出了一种结合火灾火焰特征和烟雾特征来进行判断的数字图像型火灾监测算法.火焰颜色特征是基于RGB颜色模型中的R,G,B三 ...

  4. 保留已经定位区域MATLAB,基于HSV肤色提取与连通区域过滤的人脸定位算法(Matlab)...

    概述 本篇记录了利用基于HSV颜色模型的肤色提取与连通区域过滤实现图片的人脸定位,附带知识的介绍略烦多,附带Matlab相关程序代码. 一.预备知识 图像预处理 1.1 灰度化 在RGB模型中,如果R ...

  5. 使用MFC实现将图像的RGB值转换到HSV空间,同时进行调节HSV,再将调节后的HSV值传进去转换到RGB空间实现图像在HSV空间中的色度、饱和度、亮度的调节

    工程上传到了github ,之前有一版忘记推送了,现在这个链接应该是没问题的了 工程的github链接 希望能帮到你. 文章内容: 1.回顾上文 2.实验步骤&要点提示&代码分析 3. ...

  6. 空间中的语义直线检测_基于语义分割的车道线检测算法研究

    龙源期刊网 http://www.qikan.com.cn 基于语义分割的车道线检测算法研究 作者:张道芳 张儒良 来源:<科技创新与应用> 2019 年第 06 期 摘 ; 要:随着半自 ...

  7. 基于引导滤波的暗通道matlab,基于加权引导滤波的水下图像增强算法

    在水下环境中,由于水分子以及溶解的杂质对光线的吸收和散射作用,导致水下图像出现对比度低.噪声较大等严重的退化问题.这不仅降低了图像的整体视觉效果,而且给后续图像的自动处理和识别产生不利影响.因此,研究 ...

  8. 【异常检测】基于主成分分类器的异常检测方案(文献学习)

    A novel anomaly detection scheme based on principal component classifier Mei-Ling Shyu , Shu-Ching C ...

  9. 检测到基于堆栈的缓冲区溢出_检测到堆栈粉碎

    检测到基于堆栈的缓冲区溢出 我敢打赌,每个Java开发人员在他们的职业生涯开始时第一次遇到Java代码的本机方法时都会感到惊讶. 我还可以肯定,多年来随着了解JVM如何通过JNI处理对本机实现的调用而 ...

最新文章

  1. OpenCV 静态链接 libstdc++
  2. 5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」
  3. 汇编语言 乘法和除法指令
  4. VS2002 与 IIS6.0的一个bug
  5. python与java、php、go的优势对比
  6. 当你左右看看没有发现我时,千万千万别往看……
  7. 东北大学计算机分数线2017,东北大学2017年艺术类专业录取分数线
  8. json与jsonp应用及其他ajax数据交互方式
  9. bootstrap dialog
  10. 简单理解Momentum,RMSprop,Adam优化算法
  11. 绕过广告拦截插件的解决方案
  12. Xcode5使用遇到的问题
  13. 2021-11-07算法的本质是什么?
  14. 在linux下如何显示隐藏文件
  15. C++ 20 新特性简介
  16. C++之路进阶——codevs2313(星际竞速)
  17. 调音台docker教程_Docker教程:玩转容器(简单实例)
  18. 斯里兰卡菩提树下悟道两千年
  19. 12个实用的Word、PDF文档搜索引擎
  20. 【考研高数 武忠祥+880版 自用】高数第四章基础阶段思维导图

热门文章

  1. r语言 把2条roc曲线画在同一个图上_R语言如何将多个图像画到一张图
  2. 3dsmax蒙皮教程,加载bip动作(菜鸟程序版)
  3. 排队论 (queuing theory)推论与举例
  4. 【Linux】树莓派控制光强传感器(C、python手把手教学)
  5. C语言——结构体(入门详解)
  6. 开启或关闭3389端口
  7. scrapy 爬取论坛帖子名称及链接(递归方式获取)
  8. HTML+CSS 仿写淘宝商城分类导航
  9. 淘宝 商品 货品 sku 科目 分类
  10. 使用sobel算子提取图片轮廓