利用Matlab将图片转换成素描(简笔画)风格
来源:互联网 发布:淘宝怎样打印快递单 编辑:程序博客网 时间:2024/03/28 23:37
题目: 利用Matlab将图片转换成素描(简笔画)风格
记得曾经看过别人的网络头像,是那种类似简笔画或素描的图片,一直以来都想做一个类似的头像,但始终不得要领。今天当我看到文献[1]中的图5.28时(第151-152页),我感觉那种效果类似于我想要的,于是就看了一下,写了一段程序,主要是用了文献[1]中的colorgrad函数。如果要想看懂这段程序还是得有一定的数字图像处理基础。
处理程序:
close all;clear all;clc;f = imread('zhaomin2.jpg');[VG,A,PPG] = colorgrad(f);ppg = im2uint8(PPG);ppgf = 255 - ppg;[M,N] = size(ppgf);T=200;ppgf1 = zeros(M,N);for ii = 1:M for jj = 1:N if ppgf(ii,jj)<T ppgf1(ii,jj)=0; else ppgf1(ii,jj)=235/(255-T)*(ppgf(ii,jj)-T); end endendppgf1 = uint8(ppgf1);figure;subplot(221);imshow(ppgf);subplot(222);imshow(ppgf1);subplot(223);imhist(ppgf);subplot(224);imhist(ppgf1); figure;imshow(ppgf1);
大致的原理是先用colorgrad函数检测输入RGB图像的边缘(必须是RGB图片),得到RGB向量空间的梯度(图1左上角图像),但这个图像淡色太淡,从它的直方图(图1左下角,图像直方图概念可参见文献[1]第2.3节)可以看出大部分像素值都集中于靠近255(白色)一边,因此对它做一个灰度变换(可参见文献[1]第2.2节)。程序中的参数T需要根据实际图片去设置,如从图1中可以看出T大概取200左右,这个值可以多次尝试几个:(观察图1左下角的直方图,它是图1左上角图像的直方图)
function [VG, A, PPG] = colorgrad(f, T)if (ndims(f)~=3) || (size(f,3)~=3) error('Input image must be RGB');endsh = fspecial('sobel');sv = sh';Rx = imfilter(double(f(:,:,1)), sh, 'replicate');Ry = imfilter(double(f(:,:,1)), sv, 'replicate');Gx = imfilter(double(f(:,:,2)), sh, 'replicate');Gy = imfilter(double(f(:,:,2)), sv, 'replicate');Bx = imfilter(double(f(:,:,3)), sh, 'replicate');By = imfilter(double(f(:,:,3)), sv, 'replicate'); gxx = Rx.^2 + Gx.^2 + Bx.^2;gyy = Ry.^2 + Gy.^2 + By.^2;gxy = Rx.*Ry + Gx.*Gy + Bx.*By;A = 0.5*(atan(2*gxy./(gxx-gyy+eps)));G1 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(2*A) + 2*gxy.*sin(2*A)); A = A + pi/2;G2 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(2*A) + 2*gxy.*sin(2*A));G1 = G1.^0.5;G2 = G2.^0.5;VG = mat2gray(max(G1, G2)); RG = sqrt(Rx.^2 + Ry.^2);GG = sqrt(Gx.^2 + Gy.^2);BG = sqrt(Bx.^2 + By.^2); PPG = mat2gray(RG + GG + BG); if nargin ==2 VG = (VG>T).*VG; PPG = (PPG>T).*PPG;end原图:
效果图(即图1中右上角的图像):
图3
注意:如果你脸上有痣的话要用软件(如证照之星、美图秀秀等)把痣去掉,否则做出来的效果会是本来不太明显的痣却非常明显。
文献[2][3][5]介绍了一种利用PhotoShop把图片转为素描(简笔画)风格的方法,曾学过一点photoshop,不过现在都忘干净了,电脑上早就不安装photoshop了,作为一个从事信号处理的人,应该用自己的方法去实现。以下给出两文献[4]和文献[5]中的效果图:
文献[4]:
文献[5]:
原图:
效果图:
怎么样?是不是很有感觉?赶紧做一张自己的头像吧,哈哈……
参考文献:
[1]冈萨雷斯 等著,阮秋琦 译. 数字图像处理(Matlab版)(第二版)(本科教学版)[M].北京:电子工业出版社,2014.
[2]雪花4abc,把图片转换成素描风格,百度经验,http://jingyan.baidu.com/article/ac6a9a5e7c392b2b653eac00.html
[3]爱你不要你,Photoshop制作美女照片漂亮的素描风格,http://www.missyuan.com/thread-445475-1-1.html
[4]素描风格楼梯,http://www.nipic.com/show/1/48/5196746k4f7127e3.html
[5]熙艾,yangzh691216,如何把图片变成简笔画,http://www.missyuan.com/viewthread.php?tid=678224
- 利用Matlab将图片转换成素描(简笔画)风格
- 利用Matlab将图片转换成素描(简笔画)风格
- Python3.4图片转换素描
- 利用MsOffice将PPT转换成图片
- 将图片打造铅笔素描效果
- Matlab将图片转换成asc码txt文本格式
- 利用caffe工具将图片转换成lmdb
- 利用opencv将本地图片转换成ROS格式
- 利用POI将PPT转换为图片
- 怎么把一副图片用PS调成简笔画?
- 将c风格的注释转换成cpp风格
- 利用matlab将位图图像转换到一维数组里面
- 利用Matlab将RGB图像转换到HSI空间
- 将opengl的绘制效果利用OpenCV、Matlab保存成图片
- 素描matlab实现
- matlab 素描 code
- 将一张图片用matlab转换成data格式,并导入CCS3.3显示
- 利用matlab将视频分帧成图片或将图片转成视频
- C#之AES256位加密解密
- p123.29t srand(5)排序
- hdu 4045 Machine scheduling 斯特林数+插板法
- Vim工作中常用命令-文本浏览篇
- Android数据的四种存储方式(1)SharedPreferences、SQLite、Content Provider和File 简介
- 利用Matlab将图片转换成素描(简笔画)风格
- “This text field does not specify an inputType ora hint” warning
- fun:限制表单域的输入内容格式
- 复数中的运算符重载(续)
- 工作日志5.4--5.7
- Android数据的四种存储方式(3)SharedPreferences
- 剑指offer--面试题10:二进制中1的个数--Java实现
- activity被回收
- Unity3D - 资源管理