雨后彩虹图像分割

       不经历风雨,怎么见彩虹!2024年6月14日下午一场及时雨,不仅消除了暑热,也带来了美丽彩虹,就想着尝试把空中的彩虹从自然场景中提取出来,希望对学习图像的有所帮助。

      读入自然场景下雨后彩虹图像,然后对彩虹从背景分割出来。算法思想:通过提取红、绿和蓝各分量图像和RGB转灰度后的灰度图像,通过直方图分析发现其双峰特性不明显。使用improfile绘制图像穿过背景和彩虹的R、G 、B分量的灰度值曲线,再结合imtool图像分析工具箱,发现采用R-B彩色分割因子转化为灰度图像效果较好。然后再对Irb图像进行二值化,区域标记和数学形态学处理,最后进行处理过程和结果显示。

详细代码如下:

clear all;close all;clc;
imtool close all;
I=imread('.\Rainbow_20240614.jpg');%读入雨后彩图像
imshow(I);
[M,N,D]=size(I);%测试图像的行列数和通道数
whos;
imtool(I);
Ir=I(:,:,1);
figure,imshow(Ir);
Ig=I(:,:,2);
figure,imshow(Ig)
Ib=I(:,:,3);figure,imshow(Ib)
Igray=rgb2gray(I);
figure,imhist(Igray),title('rgb2gray(I)后的灰度直方图');
x=[1   1279]
y=[450 450]
improfile(I,x,y);
Irb=Ir-Ib;
figure,imhist(Irb);
imtool(Irb);
bw=im2bw(Irb,10/255);  %通过imtool和improfile进行分析确定阈值
figure,imshow(bw);
bw2=bwareaopen(bw,16000);
figure,imshow(bw2);
[L,num]=bwlabel(bw2);%对二值图像进行标记
num
obj=bwareafilt(bw,[16000 18000]);%对指定面积范围的目标进行提取
se = strel('disk',17);  %选择合适的结构元素形式和尺寸,感兴趣的可以尝试使用线性或菱形结构元素
obj2 = imopen(obj,se);%使用数学形态学开运算
figure,imshow(obj2);
Rainbow=uint8(obj2).*I;
figure('Name','自然场景下彩虹提取','NumberTitle','off');
subplot(2,3,1),imshow(I),title('原始图像');
subplot(2,3,2),imshow(Irb),title('R-B图像');
subplot(2,3,3),imshow(bw),title('二值图像');
subplot(2,3,4),imshow(obj),title('对指定面积范围的目标进行提取');
subplot(2,3,5),imshow(obj2),title('彩虹二值图像模版');
subplot(2,3,6),imshow(Rainbow),title('提取的彩虹图像');

%本程序在MATLAB 2018b环境下通过调试

程序运行结果如图所示:

雨后彩虹原始图像:

  • 48
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值