MATLAB实现将图像转换为素描(简笔画)风格
代码:
colorgrad.m
- function [VG, A, PPG] = colorgrad(f, T)
- if (ndims(f)~=) || (size(f,)~=)
- error('Input image must be RGB');
- end
- sh = fspecial('sobel');
- sv = sh';
- Rx = imfilter(double(f(:,:,)), sh, 'replicate');
- Ry = imfilter(double(f(:,:,)), sv, 'replicate');
- Gx = imfilter(double(f(:,:,)), sh, 'replicate');
- Gy = imfilter(double(f(:,:,)), sv, 'replicate');
- Bx = imfilter(double(f(:,:,)), sh, 'replicate');
- By = imfilter(double(f(:,:,)), sv, 'replicate');
- gxx = Rx.^ + Gx.^ + Bx.^;
- gyy = Ry.^ + Gy.^ + By.^;
- gxy = Rx.*Ry + Gx.*Gy + Bx.*By;
- A = 0.5*(atan(*gxy./(gxx-gyy+eps)));
- G1 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(*A) + *gxy.*sin(*A));
- A = A + pi/;
- G2 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(*A) + *gxy.*sin(*A));
- G1 = G1.^0.5;
- G2 = G2.^0.5;
- VG = mat2gray(max(G1, G2));
- RG = sqrt(Rx.^ + Ry.^);
- GG = sqrt(Gx.^ + Gy.^);
- BG = sqrt(Bx.^ + By.^);
- PPG = mat2gray(RG + GG + BG);
- if nargin ==
- VG = (VG>T).*VG;
- PPG = (PPG>T).*PPG;
- end
demo.m
- close all;clear all;clc;
- f = imread('wo.jpg');
- [VG,A,PPG] = colorgrad(f);
- ppg = im2uint8(PPG);
- ppgf = - ppg;
- [M,N] = size(ppgf);
- T=;
- ppgf1 = zeros(M,N);
- for ii = :M
- for jj = :N
- if ppgf(ii,jj)<T %边缘区域
- % ppgf1(ii,jj)=;
- ppgf1(ii,jj)=(T-ppgf1(ii,jj))/;
- else %平滑区域
- ppgf1(ii,jj)=/(-T)*(ppgf(ii,jj)-T);
- end
- end
- end
- ppgf1 = uint8(ppgf1);
- figure;
- subplot();imshow(ppgf);
- subplot();imshow(ppgf1);
- subplot();imhist(ppgf);
- subplot();imhist(ppgf1);
- figure;imshow(ppgf1);
效果:
MATLAB实现将图像转换为素描(简笔画)风格的更多相关文章
- Matlab图像处理(02)-图像基础
数据类 Matlab中和IPT中支持的基本数据类型如下: 名称 描述 double 双精度浮点数,范围-10308~10308 8字节 uint8 无符号1字节整数,范围[0, 255] uint1 ...
- 使用matlab批量处理图像后在指定文件夹存储
使用matlab批量处理图像后在指定文件夹存储 clear;clc;close all; Files=dir('D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\*.jp ...
- 【转载】从零实现3D图像引擎:(2)画2D直线不简单
原文:从零实现3D图像引擎:(2)画2D直线不简单 1. 数学分析 1) 画直线的问题 本来我以为画直线会很容易,随便拿个直线公式,遍历X求Y画出来不就完了么,但事实并非如此.以2D直线为例,因为3D ...
- Qt之图形(简笔画-绘制卡通蚂蚁)
简述 关于简笔画的介绍很多,有动物.水果.蔬菜.交通工具等,通常会对绘制一步步进行拆分.组合.然后绘制为我们想要的结果. 下面来介绍另外的一个种类:昆虫类-卡通蚂蚁. 简述 绘制 效果 源码 绘制 效 ...
- Qt之图形(简笔画-绘制漂亮的西瓜)
简述 Summer is coming-我们呢,为大家准备了丰盛的佳果-西瓜,清爽解渴,甘味多汁. 一笔一划学简笔画,分分钟让你掌握一门新技能,下面我们来绘制一个"盛夏之王"-西瓜 ...
- CSS如何将图像转换为模糊图像?
在CSS中,可以使用filter属性来模糊处理图像:filter属性用于将图像转换为模糊图像.该属性主要用于设置图像的视觉效果. 语法: filter: blur() 属性值: ● blur():给图 ...
- 在C#中将图像转换为BASE64
本教程说明如何在C#.NET Windows Forms Application中将图像转换为base64字符串,以及将base64字符串转换为图像.您可以创建一个新的Windows窗体应用程序项目来 ...
- Python代码阅读(第21篇):将变量名称转换为蛇式命名风格
Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现将变量名称转换为蛇式命名风格(snake case)的功能. 本篇阅读的代码片段来自于30-second ...
- matlab在处理图像时为什么把数据转换为double型?
1 有些函数支持double型,而不支持uint8的数据类型,所以要转换 2 精度问题了,因为uint8进行数据处理的时候,容易造成数据溢出或精度不够. 为了节省存储空间,matlab为图像提供了特殊 ...
随机推荐
- C++ MFC获取软件运行目录 (包含软件名)
TCHAR *path = new TCHAR[MAX_PATH]; GetModuleFileName(NULL,path,MAX_PATH); AfxMessageBox(path);
- 双机相关知识(原理、LVM、Raid技术)
1 双机知识 1.1 预备知识 1.1.1 基本概念 双机热备:双机热备双机管理软件可以根据心跳自动检测环境运行情况,如果发现一个节点挂掉了,会自动切换到另外一个 ...
- Redis 软件和配置
Redis 下载 1.通过CMD命令进入redis 文件目录 2.运行[redis-server redis.windows.conf]
- 本地缺Android SDK版本20,Unable to resolve target 'android-20'
解决方案一 本地缺Android SDK版本20,Unable to resolve target 'android-20' 通过SDK Manager安装一个Android 20. 解决方案二: L ...
- Bridging signals hdu 1950 (最长上升子序列)
http://acm.split.hdu.edu.cn/showproblem.php?pid=1950 题意:求最长上升(不连续or连续)子序列 推荐博客链接: http://blog.csdn.n ...
- 使用 BeanCopier 复制对象
Cglib是一款比较底层的操作java字节码的框架. BeanCopier是一个工具类,可以用于Bean对象内容的复制. 复制Bean对象内容的方法有很多,比如自己手动get set ,或者使用Pro ...
- 第二章 DateTime工具类
项目中经常需要将DateTime转化成各种格式的String类型,或将各种类型的String转为DateTime类型. 本文提供一个DateTime与String的转换工具类: import org. ...
- lua中for循环的四种遍历方式
lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3 key,value pairs 取每一 ...
- 《Java程序设计》实验5
20145318 <Java程序设计>实验5 实验内容 运行下载的TCP代码,结对进行,一人服务器,一人客户端: 利用加解密代码包,编译运行代码,一人加密,一人解密: 集成代码,一人加密后 ...
- 【java】:定时任务
PS:转 http://blog.csdn.net/lotusyangjun/article/details/6450421/