词云之matlab实现复杂数字图像背景剔除

本文介绍如何使用matlab进行数字图像背景去除,专注于词云制作中图像分割问题。通过阈值分割、颜色空间变换、形态学处理等方法,对‘汗血宝马’图像进行处理,实现马匹的精确抠图,并解决孔洞问题,为词云创作提供干净的背景。同时,探讨了知识在人脸识别应用中的迁移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了制作各种好看的词云标签,一张好的背景图片寻找起来并不容易,例如本文所使用的"汗血宝马"的图片,背景不是我所需要的,如何实现对图像的有效分割?去除背景噪声是本文关注的重点。本文拟采用matlab来实现这个简易的功能。
1.本文将对马进行测试
在这里插入图片描述
2.数字图像背景去除最好的方式有以下几种:
a.PhontoShop,使用选择工具即可;
b.最简单的阈值分割理论;(本文的方法),C++,matlab,python都有实现的包可以供调用。
c.背景差分算法;

3.数字图像阈值分割处理的一般化流程

…1.直接读入图片后,做二值化处理,根据数据游标的取值做初步的分割考察,或者使用imhist绘制图像的像素分布直方图来确定分割像素值;
…2.如果直接阈值分割不行,那可以考虑变换颜色空间来看是否便于基于颜色做图像分割;
…3.在变换了颜色空间的图像上,通过数据游标直接选定大致的阈值,后续再手动改进;
…4.分割后的图像常常会有孔洞,此时需要多次使用形态学方法(进行形态学处理:腐蚀和膨胀)来做孔洞填充;
…5.图像拼接的话需要imresize()成相同大小的图片;
…6.知识迁移到人脸识别应用中来,可以框出人脸位置区域(人脸正面照效果较好)

4.分割马的图像并框选出来马

%function:
%       基于颜色的图像分割;
%       定位图片中的马的区域;
%procession:
%       1.直接读入图片后,做二值化处理,根据数据游标的取值做初步的分割考察;
%       2.如果直接阈值分割不行,那需要考虑变换颜色空间来看是否便于图像分割;
%       3.在变换了颜色空间的图像上,通过数据游标直接选定大致的阈值,后续再手动改进;
%       4.分割后的图像常常会有孔洞,此时需要多次使用形态学方法(进行形态学处理:腐蚀和膨胀)来做孔洞填充;
%       5.图像拼接的话需要imresize()成相同大小的图片;
%       6.知识迁移到人脸识别应用中来,可以框出人脸位置区域(适用于人脸正面照)


clear  all;
clc;
close all;
%开始计时
tic
%输入需要识别的图像
[filename,pathname,fi]=uigetfile(...
                    {'*.*', 'all image file (*.*)';...
                     '*.bmp','all image file (*.bmp)';...
                     '*.jpg','all image file (*.jpg)'},...
                     '请选择要识别的图片',...
                     'MultiSelect', 'on');
RGB=imread([pathname filename]); %界面手动选择读入方式
%RGB = imread('D:\Program Files\MATLAB\workspace\timg1.jpg'); %直接路径传入读取方式

figure('name','process'),
subplot(2,2,1),imshow(RGB),title('原始RGB'),

%convert frame from RGB to YCBCR colorspace(转换到YCBCR空间)
YCBCR = rgb2ycbcr(RGB);
whos,
subplot(2,2,2),imshow(YCBCR),title('YCBCR'),
%filter YCBCR image between values and store filtered image to threshold
%matrix(用各个通道的阈值对其进行二值化处理)
%% 通过数据游标直接选定大致的阈值,后续再手动改进
%Y_MIN = 40;  Y_MAX = 160;
%Cb_MIN = 80;   Cb_MAX = 120;
%Cr_MIN = 138;   Cr_MAX = 195;
Y_MIN = 30;  Y_MAX = 215; %到255也可以
Cb_MIN = 65;   Cb_MAX = 135;
Cr_MIN = 138;   Cr_MAX = 195; %已经是最佳,否则会引入背景噪声.
threshold1=roicolor(YCBCR(:,:,1),Y_MIN,Y_MAX)&roicolor(YCBCR(:,:,2),Cb_MIN,Cb_MAX)&roicolor(YCBCR(:,:,3),Cr_MIN,Cr_MAX);
subplot(2,2,3),imshow(threshold1),title('YCBCR二值化'),

%perform morphological operations on thresholded image to eliminate noise
%and emphasize the filtered object(s)(进行形态学处理:腐蚀、膨胀、孔洞填充)
dilateElement=strel('square',13) ;
threshold=imdilate(threshold1, dilateElement);
erodeElement = strel('square', 4) ;
threshold = imerode(threshold,erodeElement);
erodeElement = strel('square', 3) ;
threshold = imerode(threshold,erodeElement);
erodeElement = strel('square', 2) ;
threshold = imerode(threshold,erodeElement);
threshold=imfill(threshold,'holes');
subplot(2,2,4),imshow(threshold),title('形态学处理');
% matlab多行注释
%{
    erodeElement = strel('square', 2) ;
    dilateElement=strel('square',4) ;
    threshold = imerode(threshold,erodeElement);
    threshold = imerode(threshold,erodeElement);
    threshold=imdilate(threshold, dilateElement);
    threshold=imdilate(threshold, dilateElement);
    threshold=imfill(threshold,'holes');
    subplot(2,2,4),imshow(threshold),title('形态学处理'),
 %}

%获取区域的'basic'属性, 'Area', 'Centroid', and 'BoundingBox' 
figure('name','处理结果')
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值