题目: 利用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:Mfor jj = 1:Nif ppgf(ii,jj)<Tppgf1(ii,jj)=0;elseppgf1(ii,jj)=235/(255-T)*(ppgf(ii,jj)-T);endend
end
ppgf1 = 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左上角图像的直方图)

图1

下面是colorgrad函数的原代码(文献[1]第337-338页):

function [VG, A, PPG] = colorgrad(f, T)
if (ndims(f)~=3) || (size(f,3)~=3)error('Input image must be RGB');
end
sh = 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 ==2VG = (VG>T).*VG;PPG = (PPG>T).*PPG;
end

原图:

图2

效果图(即图1中右上角的图像):

图3

注意:如果你脸上有痣的话要用软件(如证照之星、美图秀秀等)把痣去掉,否则做出来的效果会是本来不太明显的痣却非常明显。

文献[2][3][5]介绍了一种利用PhotoShop把图片转为素描(简笔画)风格的方法,曾学过一点photoshop,不过现在都忘干净了,电脑上早就不安装photoshop了,作为一个从事信号处理的人,应该用自己的方法去实现。以下给出两文献[4]和文献[5]中的效果图:

文献[4]:

图4

文献[5]:

原图:

图5

效果图:

图6

怎么样?是不是很有感觉?赶紧做一张自己的头像吧,哈哈……

参考文献:

[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将图片转换成素描(简笔画)风格相关推荐

  1. 利用MATLAB将图片转换成coe文件、TXT文件、mif文件、bin文件

    利用MATLAB将图片转换成coe文件.TXT文件.mif文件 利用MATLAB将图片转换成coe文件 利用MATLAB将图片转换成txt文件 利用MATLAB将图片转换成mif文件 利用MATLAB ...

  2. python将图片转换成动漫,python实现图片转换成素描和漫画格式

    本文实例为大家分享了python实现图片转换成素描和漫画格式的具体代码,供大家参考,具体内容如下 原图 图片转换后的成果 源码 # -*- coding: utf-8 -*- import cv2 f ...

  3. matlab中asc格式,matlab将图片转换成asc码txt文本格式 | 学步园

    matlab将图片转换成asc码 function img2txt(imfile,varargin); % using an ASCII character for every stepx pixel ...

  4. pythonmat文件转excel,利用python将图片转换成excel文档格式

    前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...

  5. python 人像素描_基于python实现把图片转换成素描

    这篇文章主要介绍了基于python实现把图片转换成素描,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 导语: 你是否还在为当时年少时没有选择自己的梦 ...

  6. python画素描画_基于python实现把图片转换成素描

    这篇文章主要介绍了基于python实现把图片转换成素描,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 导语: 你是否还在为当时年少时没有选择自己的梦 ...

  7. pythonmat文件转excel_利用python将图片转换成excel文档格式详解

    本文主要介绍了关于利用python将图片转换成excel文档的相关内容,编写了一小段Python代码,将图片转为了Excel,纯属娱乐,下面这篇文章主要给大家介绍了关于利用python将图片转换成ex ...

  8. python读取图片文字为表格_利用python将图片转换成excel文档格式

    前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...

  9. python将excel转换成图片格式_利用python将图片转换成excel文档格式

    前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...

最新文章

  1. Advantages of genome sequencing by long-read sequencer using SMRT technology in medical area
  2. 超越Facebook、谷歌、微软,百度发布全球首个百亿参数对话预训练生成模型PLATO-XL...
  3. IE下实现全屏两方法
  4. mysql数据太大,如何导入_MySQL导入文件过大怎么办
  5. [burp][CTF]burp intruder爆破出现 Payload set 1: Invalid number settings的解决办法
  6. GiraffeDet的学习笔记
  7. CS229学习笔记(3)逻辑回归(Logistic Regression)
  8. 一个关于Schema的问题,请求帮助
  9. 机器学习其实只是“皇帝的新衣”
  10. 渗透测试实战分享—从app到网站沦陷
  11. 零零信安王宇:通过基于VPT的风险管理 用20%的时间去解决80%的风险
  12. Cadence OrCAD Capture 自底而上的设计流程
  13. 新息自适应卡尔曼滤波matlab代码,基于新息协方差的自适应渐消卡尔曼滤波器
  14. 恒生电子面试过程纪录
  15. Python优秀函数库集锦(二)
  16. IntelliJ IDEA Remote Development 使用体验
  17. 香港理工大学智能计算实验室招收进化计算/机器学习/类脑计算方向全奖博士生/研究助理/博士后...
  18. SAP SCC4所有细节详细解析
  19. centos7源码搭建lnmp环境
  20. 区块链常见漏洞万字总结【Web3从业者必备】

热门文章

  1. 等额本息还款法贷款利息计算方法及还款计划
  2. 自媒体怎么赚钱?自媒体的5大变现方式!
  3. 关于dva框架的二三事
  4. 【dva】dva使用与实现(四)
  5. 数字电视音视频马赛克和不同步现象原因
  6. 分布式id php,PHP生成类MongoId的分布式主键
  7. c/c++判断数组中元素的个数
  8. 传智播客与英特尔结成合作伙伴,共同推动软件技术进步
  9. javascript 0基础入门
  10. mac播客播放器:Moon FM for Mac