代码:

colorgrad.m

  1. function [VG, A, PPG] = colorgrad(f, T)
  2. if (ndims(f)~=) || (size(f,)~=)
  3. error('Input image must be RGB');
  4. end
  5. sh = fspecial('sobel');
  6. sv = sh';
  7. Rx = imfilter(double(f(:,:,)), sh, 'replicate');
  8. Ry = imfilter(double(f(:,:,)), sv, 'replicate');
  9. Gx = imfilter(double(f(:,:,)), sh, 'replicate');
  10. Gy = imfilter(double(f(:,:,)), sv, 'replicate');
  11. Bx = imfilter(double(f(:,:,)), sh, 'replicate');
  12. By = imfilter(double(f(:,:,)), sv, 'replicate');
  13.  
  14. gxx = Rx.^ + Gx.^ + Bx.^;
  15. gyy = Ry.^ + Gy.^ + By.^;
  16. gxy = Rx.*Ry + Gx.*Gy + Bx.*By;
  17. A = 0.5*(atan(*gxy./(gxx-gyy+eps)));
  18. G1 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(*A) + *gxy.*sin(*A));
  19.  
  20. A = A + pi/;
  21. G2 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(*A) + *gxy.*sin(*A));
  22. G1 = G1.^0.5;
  23. G2 = G2.^0.5;
  24. VG = mat2gray(max(G1, G2));
  25.  
  26. RG = sqrt(Rx.^ + Ry.^);
  27. GG = sqrt(Gx.^ + Gy.^);
  28. BG = sqrt(Bx.^ + By.^);
  29.  
  30. PPG = mat2gray(RG + GG + BG);
  31.  
  32. if nargin ==
  33. VG = (VG>T).*VG;
  34. PPG = (PPG>T).*PPG;
  35. end

demo.m

  1. close all;clear all;clc;
  2. f = imread('wo.jpg');
  3. [VG,A,PPG] = colorgrad(f);
  4. ppg = im2uint8(PPG);
  5. ppgf = - ppg;
  6. [M,N] = size(ppgf);
  7. T=;
  8. ppgf1 = zeros(M,N);
  9. for ii = :M
  10. for jj = :N
  11. if ppgf(ii,jj)<T %边缘区域
  12. % ppgf1(ii,jj)=;
  13. ppgf1(ii,jj)=(T-ppgf1(ii,jj))/;
  14. else %平滑区域
  15. ppgf1(ii,jj)=/(-T)*(ppgf(ii,jj)-T);
  16. end
  17. end
  18. end
  19. ppgf1 = uint8(ppgf1);
  20. figure;
  21. subplot();imshow(ppgf);
  22. subplot();imshow(ppgf1);
  23. subplot();imhist(ppgf);
  24. subplot();imhist(ppgf1);
  25.  
  26. figure;imshow(ppgf1);

效果:

MATLAB实现将图像转换为素描(简笔画)风格的更多相关文章

  1. Matlab图像处理(02)-图像基础

    数据类 Matlab中和IPT中支持的基本数据类型如下: 名称 描述 double 双精度浮点数,范围-10308~10308  8字节 uint8 无符号1字节整数,范围[0, 255] uint1 ...

  2. 使用matlab批量处理图像后在指定文件夹存储

    使用matlab批量处理图像后在指定文件夹存储 clear;clc;close all; Files=dir('D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\*.jp ...

  3. 【转载】从零实现3D图像引擎:(2)画2D直线不简单

    原文:从零实现3D图像引擎:(2)画2D直线不简单 1. 数学分析 1) 画直线的问题 本来我以为画直线会很容易,随便拿个直线公式,遍历X求Y画出来不就完了么,但事实并非如此.以2D直线为例,因为3D ...

  4. Qt之图形(简笔画-绘制卡通蚂蚁)

    简述 关于简笔画的介绍很多,有动物.水果.蔬菜.交通工具等,通常会对绘制一步步进行拆分.组合.然后绘制为我们想要的结果. 下面来介绍另外的一个种类:昆虫类-卡通蚂蚁. 简述 绘制 效果 源码 绘制 效 ...

  5. Qt之图形(简笔画-绘制漂亮的西瓜)

    简述 Summer is coming-我们呢,为大家准备了丰盛的佳果-西瓜,清爽解渴,甘味多汁. 一笔一划学简笔画,分分钟让你掌握一门新技能,下面我们来绘制一个"盛夏之王"-西瓜 ...

  6. CSS如何将图像转换为模糊图像?

    在CSS中,可以使用filter属性来模糊处理图像:filter属性用于将图像转换为模糊图像.该属性主要用于设置图像的视觉效果. 语法: filter: blur() 属性值: ● blur():给图 ...

  7. 在C#中将图像转换为BASE64

    本教程说明如何在C#.NET Windows Forms Application中将图像转换为base64字符串,以及将base64字符串转换为图像.您可以创建一个新的Windows窗体应用程序项目来 ...

  8. Python代码阅读(第21篇):将变量名称转换为蛇式命名风格

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现将变量名称转换为蛇式命名风格(snake case)的功能. 本篇阅读的代码片段来自于30-second ...

  9. matlab在处理图像时为什么把数据转换为double型?

    1 有些函数支持double型,而不支持uint8的数据类型,所以要转换 2 精度问题了,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够. 为了节省存储空间,matlab为图像提供了特殊 ...

随机推荐

  1. C++ MFC获取软件运行目录 (包含软件名)

    TCHAR *path = new TCHAR[MAX_PATH];   GetModuleFileName(NULL,path,MAX_PATH); AfxMessageBox(path);

  2. 双机相关知识(原理、LVM、Raid技术)

    1        双机知识 1.1         预备知识 1.1.1     基本概念 双机热备:双机热备双机管理软件可以根据心跳自动检测环境运行情况,如果发现一个节点挂掉了,会自动切换到另外一个 ...

  3. Redis 软件和配置

    Redis 下载 1.通过CMD命令进入redis 文件目录 2.运行[redis-server redis.windows.conf]

  4. 本地缺Android SDK版本20,Unable to resolve target 'android-20'

    解决方案一 本地缺Android SDK版本20,Unable to resolve target 'android-20' 通过SDK Manager安装一个Android 20. 解决方案二: L ...

  5. Bridging signals hdu 1950 (最长上升子序列)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1950 题意:求最长上升(不连续or连续)子序列 推荐博客链接: http://blog.csdn.n ...

  6. 使用 BeanCopier 复制对象

    Cglib是一款比较底层的操作java字节码的框架. BeanCopier是一个工具类,可以用于Bean对象内容的复制. 复制Bean对象内容的方法有很多,比如自己手动get set ,或者使用Pro ...

  7. 第二章 DateTime工具类

    项目中经常需要将DateTime转化成各种格式的String类型,或将各种类型的String转为DateTime类型. 本文提供一个DateTime与String的转换工具类: import org. ...

  8. lua中for循环的四种遍历方式

    lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3   key,value pairs 取每一 ...

  9. 《Java程序设计》实验5

    20145318 <Java程序设计>实验5 实验内容 运行下载的TCP代码,结对进行,一人服务器,一人客户端: 利用加解密代码包,编译运行代码,一人加密,一人解密: 集成代码,一人加密后 ...

  10. 【java】:定时任务

    PS:转 http://blog.csdn.net/lotusyangjun/article/details/6450421/