图像处理(三)——中国传统工艺画风格的图像转换应用
2015-11-18 16:57
337 查看
[b]中国传统工艺画风格的图像转换应用[/b]
1. 项目介绍
希望做一个应用,输入为普通RGB或HSI图像,输出为带有中国特色的蛋壳粘贴画。使用的技术有Matlab、superpixel算法等。
View Code
myslic_function2函数的效果为:
上面原图为img,myslic_function2函数处理过的图为img2,其关系为
img2 = myslic_function2(img, 1000, 100);
myslic_function2函数接受3个参数,分别是原图、结果想要的超像素的个数、Compactness factor(值越大超像素块儿边界越光滑)。
要想获得蛋壳粘贴画的效果,还应在超像素块儿间加上裂纹,当然裂纹也通过对slic算法的结果进行再处理产生。
产生裂纹的代码段:
产生的裂纹效果:
最后,将产生裂纹加在经过myslic_function2函数处理后的图片上,代码如下:
最后的结果:
挺萌的还。附项目目录下载。其中image_shade1.m是运行的图形界面。
1. 项目介绍
希望做一个应用,输入为普通RGB或HSI图像,输出为带有中国特色的蛋壳粘贴画。使用的技术有Matlab、superpixel算法等。
%====================================================================== % 此函数将图像分为超像素块,块儿内颜色取值一样,为之前块儿内颜色的均值 %====================================================================== function imgout=myslic_function2(imgin, number_of_sp, compactness_factor) imgout = imgin; [m,n] = size(imgin); n=n/3; [labels, numlabels] = slicmex(imgin,number_of_sp,compactness_factor);%numlabels is the same as number of superpixels imgin = int32(imgin); labelstmp = labels; % 以下所有代码是将RGB图像的三个通道,以labels为模板,分别求每个超像素内颜色的均值。 img = imgin(:,:,1); img1 = img; for i = 1 : m for j = 1 : n if (labelstmp(i, j) >= 0) current = labelstmp(i, j); sums = 0; count = 0; %average= 0; % 找到一个块,计算块儿内颜色的均值 for ii = 1 : m for jj = 1 : n if (labelstmp(ii, jj) == current) sums = sums + img(ii, jj); count = count + 1; end end end average = sums / count; % 将块儿内颜色设为均值 for ii = 1 : m for jj = 1 : n if (labelstmp(ii, jj) == current) img1(ii, jj) = average; labelstmp(ii, jj) = -1; end end end end end end imgout(:,:,1) = img1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% labelstmp = labels; img = imgin(:,:,2); img1 = img; for i = 1 : m for j = 1 : n if (labelstmp(i, j) >= 0) current = labelstmp(i, j); sums = 0; count = 0; %average= 0; % 找到一个块,计算块儿内颜色的均值 for ii = 1 : m for jj = 1 : n if (labelstmp(ii, jj) == current) sums = sums + img(ii, jj); count = count + 1; end end end average = sums / count; % 将块儿内颜色设为均值 for ii = 1 : m for jj = 1 : n if (labelstmp(ii, jj) == current) img1(ii, jj) = average; labelstmp(ii, jj) = -1; end end end end end end imgout(:,:,2) = img1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% labelstmp = labels; img = imgin(:,:,3); img1 = img; for i = 1 : m for j = 1 : n if (labelstmp(i, j) >= 0) current = labelstmp(i, j); sums = 0; count = 0; %average= 0; % 找到一个块,计算块儿内颜色的均值 for ii = 1 : m for jj = 1 : n if (labelstmp(ii, jj) == current) sums = sums + img(ii, jj); count = count + 1; end end end average = sums / count; % 将块儿内颜色设为均值 for ii = 1 : m for jj = 1 : n if (labelstmp(ii, jj) == current) img1(ii, jj) = average; labelstmp(ii, jj) = -1; end end end end end end imgout(:,:,3) = img1;
View Code
myslic_function2函数的效果为:
上面原图为img,myslic_function2函数处理过的图为img2,其关系为
img2 = myslic_function2(img, 1000, 100);
myslic_function2函数接受3个参数,分别是原图、结果想要的超像素的个数、Compactness factor(值越大超像素块儿边界越光滑)。
要想获得蛋壳粘贴画的效果,还应在超像素块儿间加上裂纹,当然裂纹也通过对slic算法的结果进行再处理产生。
产生裂纹的代码段:
img = imread('06.jpg'); edgeline = rgb2gray(img); [labels, numlabels] = slicmex(img, 1000, 100); [m,n]=size(labels); for ii = 2 : m-1 for jj = 2 : n-1 if (labels(ii, jj) == labels(ii-1, jj)&&labels(ii, jj) == labels(ii+1, jj)&&labels(ii, jj) == labels(ii, jj-1)&&labels(ii, jj) == labels(ii, jj+1) ) edgeline(ii, jj)=0; else edgeline(ii, jj)=255; end end end % 对已经产生的裂纹进行高斯滤波,之后再进行阈值过滤 sigma = 1.3; gausFilter = fspecial('gaussian',[5 5],sigma); edgeline=imfilter(edgeline,gausFilter,'replicate'); edgeline(edgeline>100) = 255; edgeline(edgeline<=100) = 0; figure(3); imshow(edgeline);
产生的裂纹效果:
最后,将产生裂纹加在经过myslic_function2函数处理后的图片上,代码如下:
img2(:,:,1)=img2(:,:,1) - edgeline; img2(:,:,2)=img2(:,:,2) - edgeline; img2(:,:,3)=img2(:,:,3) - edgeline;
最后的结果:
挺萌的还。附项目目录下载。其中image_shade1.m是运行的图形界面。
相关文章推荐
- excel 正则表达式用法
- Hadoop学习笔记—7.计数器与自定义计数器
- php手记-获得文件或文件夹的上级目录、spl_autoload_register、__autoload
- 深入理解BootStrap Item15 -- 媒体对象(media)
- Android fragment源码全解析
- CSS实现单行、多行文本溢出显示省略号(…)
- 服务控件与html标签的一点
- Hadoop学习笔记—6.Hadoop Eclipse插件的使用
- SSH:Spring框架(声明式事务管理详解)
- NSDate和UIImage 数据相互转化_数据库中只能存二进制数据
- 在共享DLL中使用MFC 和 在静态库中使用MFC的区别 .
- MongoDB 知识要点一览
- Servlet程序开发--实例操作:MVC设计模式应用
- ereg/eregi报错处理办法
- ORACLE IN 与NOT IN 的性能区别
- ORACLE in与exists语句的区别(一)
- Hadoop学习笔记—4.初识MapReduce
- Java生成随机汉字验证码图片
- java中的字符集
- 投标书