Matlab 简单图像特效 Comet效果

本文介绍如何在Matlab中实现Comet图像特效,通过OTSU算法进行二值化,结合数学形态学运算提取边缘。文章详细阐述了两种搜索最左侧点的方法,并提供预处理、底图生成及特效形成的过程。最终,通过生成gif动图展示了mode1和mode2的效果。
摘要由CSDN通过智能技术生成

思路

希望参考matlab里的内置comet()函数实现一个图像的动态效果

参考图片如下

这里写图片描述
1.将图像二值化并提取边缘。

2.生成底图(形成特效的颜色)。
在这个动态效果中,每一个被激活的点在那一瞬间被赋予底图对应点的颜色。在之后每一轮对RGB图层乘以k(k<1)形成不断变暗的效果。

3.用mode1&2两种方式搜索最左侧点。

在mode1中,当一个点(一段垂直的线)左侧没有相邻的白点时,判断这个点(线的中点)为左侧点。
在mode2中,当一个点(一段垂直的线)是某个联通的环中x坐标最小的时,判断这个点(线的中点)为左侧点。

4.依次激活最左侧点。
每个被激活的点会去激活与它相邻的点以及在它左侧的左侧点。

5.生成gif效果图。

最后形成一定的延时。


实现

理论知识

OTSU算法

当取最佳阈值时,背景应该与前景差别最大,OTSU以类间方差为衡量标准。

数学形态学运算

轮廓提取:对于二值图像,当一个非零的点连接至少一个零点的时候它是轮廓点。(或者可以通过膨胀/腐蚀之后与原图取差。这里相对比较灵活,如果没有经过去噪处理可以考虑通过填充孤立的黑点/去除孤立的白点来进一步处理图像)

自带函数

预处理

%%pretreatment 预处理
I=imread(in);
I=rgb2gray(I); %transform RGB to Gray 将RGB转为灰度
thresh = graythresh(I);     %自动确定二值化阈值
I2 = im2bw(I,thresh);       %对图像二值化
BW2 = bwperim(I2);     %查找边缘

编写函数

查找左侧点

findleft(findleft2):用mode1(mode2)查找最左侧点

function [ T ] = findleft2( BW2 )
%FINDLEFT1 查找最左侧点
%二值图像BW2 返回行为2的矩阵T 每一列代表一个点

        M_dim=size(BW2);
        %%查找最左侧点
        T=[];
        temp=[];        
        for i=4:M_dim(2)-4
            index=0;
            for j=4:M_dim(1)-4  %%search the i th column
                if (BW2(j,i)==1)
                    if 4==i
                        T=[T,[j,i]'];%%add point (j,i)
                        temp=[temp,[j,i]'];
                    else
                        index=index+1;
                        if (BW2(j-1,i)+BW2(j+1,i)+BW2(j-1,i-1)+BW2(j,i-1)+BW2(j</
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值