这个学期有好几门作业都是用M写的,就比如我的数字图像处理大作业吧,基本也是做的这块内容,下面要讲的会更简单一点,增加了一些其他的功能。
其实我还是准备挣扎一下processing的
processing版移步:https://blog.csdn.net/dont_like_jiemo/article/details/85346461
以上全是废话,下面开始正经的了。

引言

什么是绘画呢?我们先来看下面一组图




从上面的几张图片我们不难看出,所谓的绘画有四个基本要点。首先我们得有材料:颜料、画布,画笔等物质要素,其次还得有作画者,人和大象都是作画者,他们有着自己“独特”的创作思想与技法,接着是交互方式:作画者是如何操作材料来完成作画的呢,人可以用画笔,数位板或者直接用鼠标,但是大象却可以用它的鼻子哦。最后是作品:也就是我们最后呈现出来的绘画作品。
基于以上几点,我来谈一下我的这个绘画系统。

总体设计方案

传统的绘画形式,设置了鼠标自由绘画,画圆,直线,曲线的功能
新型的图像处理功能,类似于PS的图像滤镜功能
拓展延伸,绘制简单三维图形

作品效果与比较

鼠绘圣诞节麋鹿

实时画直线的功能类似于我们传统的绘画,但是确定始末位置的直线,与规定位置的圆由于传统的不大一样了,更偏向于码绘的那一块。

%画直线
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
a=str2double(get(handles.edit1,'String'));
b=str2double(get(handles.edit2,'String'));
x=str2double(get(handles.edit3,'String'));
y=str2double(get(handles.edit4,'String'));
axes(handles.axes1);
plot([a,b],[x,y],'-');
hold(handles.axes1,'on');%画圆,可以更改圆的rgb填充色
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
r=2; theta=0:pi/100:2*pi;
x=r*cos(theta);
y=r*sin(theta);
axes(handles.axes1);
plot(x,y,'-');
hold(handles.axes1,'on')
R=str2double(get(handles.edit5,'String'));
G=str2double(get(handles.edit6,'String'));
B=str2double(get(handles.edit7,'String'));
c=[R,G,B];
fill(x,y,c)
hold(handles.axes1,'on')

sin cos tan

function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)x=handles.x;
y=sin(x);
plot(handles.axes1,x,y);
hold(handles.axes1,'on')
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)x=handles.x;
y=cos(x);
plot(handles.axes1,x,y);
hold(handles.axes1,'on')
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
x=handles.x;
y=tan(x);
plot(handles.axes1,x,y);
hold(handles.axes1,'on')


function Untitled_4_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global im;
im1=rgb2gray(im);
axes(handles.axes2);
Fa = 2; Fb = -55;
im2=im2double(im1);
im2 = Fa .* im2 + Fb / 255;
imshow(im2),title('点运算','FontWeight','Bold');
hold(handles.axes1,'on')

function Untitled_5_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global im;
R=im(:,:,1);
G=im(:,:,2);
B=im(:,:,3);
r=histeq(R);
g=histeq(G);
b=histeq(B);
im1=cat(3,r,g,b);
axes(handles.axes2);
imshow(im1),title('真彩色','FontWeight','Bold');

function Untitled_6_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global im;
im1=rgb2gray(im);
[M,N]=size(im1);
L=255;
im2=double(im1);
im3=floor(im2/64);
R=im3;G=im3;B=im3;
for i=1:Mfor j=1:Nswitch im3(i,j)case 0R(i,j)=0;G(i,j)=4*im2(i,j);B(i,j)=L;case 1R(i,j)=0;G(i,j)=L;B(i,j)=-4*im2(i,j)+2*L;case 2R(i,j)=4*im2(i,j)-2*L;G(i,j)=L;B(i,j)=0;case 3R(i,j)=L;G(i,j)=4*im2(i,j)+4*L;B(i,j)=0;endend
end
g(:,:,1)=R;
g(:,:,2)=G;
g(:,:,3)=B;
g=uint8(g);
axes(handles.axes2);
imshow(g),title('假彩色');


上面是四种不同风格的图像处理,真彩色,假彩色,点运算出来的黑白图,还是泛黄做旧处理,这就是PS里面的滤镜功能了,对已有的图像进行处理。比起PS家的滤镜,这里的选择就会少很多,不可置否的是,它的可用性会更高的,除非是非常有必要,大家是会更倾向于用美图秀秀这样的小白软件来家滤镜的,我这次做的这个就有点小白了,化繁为简才是真爱啊。





图像分割对图像进行处理,基本全阈值,一维最大熵法,迭代
这一块偏重于MATLAB它本身的数学处理方向,通过一些函数的调用,我们可以对图像进行一些不同于传统绘画的操作,同一种操作也可以通过不同的算法来达到优劣参差的效果。传统的绘画是不会大设计到这一块,已经很偏重图像处理的内容,但我们画出来的画最终也还是可能会变成图像的,也是殊途同归的。

function Untitled_11_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_11 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global im;
im1=rgb2gray(im);
count = 0;
T = mean2(im1);
done = false;
while ~done  countcount = count + 1;  g = im1 > T;  Tnext = 0.5*(mean(im1(g)) + mean(im1(~g)));  done = abs(T - Tnext) < 0.5;  T = Tnext;
end
g = im2bw(im1, T/255);
axes(handles.axes2);
imshow(g),title('基本全局阈值','FontWeight','Bold');% --------------------------------------------------------------------
function Untitled_12_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_12 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global im;
im1=rgb2gray(im);
vHist=imhist(im1);
[m,n]=size(im1);
p=vHist(find(vHist>0))/(m*n);%求每一不为零的灰度值的概率
Pt=cumsum(p);%计算出选择不同t值时,A区域的概率
Ht=-cumsum(p.*log(p));%计算出选择不同t值时,A区域的熵
HL=-sum(p.*log(p));%计算出全图的熵
Yt=log(Pt.*(1-Pt)+eps)+Ht./(Pt+eps)+(HL-Ht)./(1-Pt+eps);%计算出选择不同t值时,判别函数的值
[a,th]=max(Yt);%th即为最佳阈值
segImg=(im1>th);
axes(handles.axes2);
imshow(segImg),title('一维最大熵法','FontWeight','Bold');% --------------------------------------------------------------------
function Untitled_13_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_13 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global im;
a=rgb2gray(im);
h=imhist(a);
t=[];t(1)=128;max=500;
for i=1:maxs1=0;s2=0;s3=0;s4=0;for k=1:t(i)s1=s1+h(k)*k;s2=s2+h(k);endfor k=t(i)+1:256s3=s3+h(k)*k;s4=s4+h(k);endt(i+1)=floor((s1/s2+s3/s4)/2);if(abs(t(i+1)-t(i))<10^-7)break;end
end
tt=t(i+1);
b=a;
b(find(b<tt))=0;
b(find(b>=tt))=255;
axes(handles.axes2);
imshow(b);title('迭代','FontWeight','Bold');

三维画图这一块,我是去找了一些三维的代码,来作为比较增加趣味性的,本身一些传统的绘画软件里面也有蛮多的绘制三维图形的功能,但也能发现M家绘制出来的还是蛮别具一格,具有浓浓的数学气息,这或许就是他们的不同点吧。

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
z=linspace(0,10,101);
x=sin(z);y=cos(z);
plot3(x,y,z,'g','LineWidth',2)
hold on
plot3(x,y,z,'p','MarkerSize',10)

function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%cla(handles.axes1,'reset');
cla reset
[a,b,c]=peaks(50);
mesh(a,b,c)
axis tight

function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%cla(handles.axes1,'reset');
xx=linspace(-1,1,50);
yy=linspace(-2,2,100);
[x,y]=meshgrid(xx,yy);
z=x.^2+2*y.^2;
surf(x,y,z);
shading interp

function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%cla(handles.axes1,'reset');
[a,b,c]=peaks(50);
surfl(a,b,c);
shading interp
axis tight

清除重置功能

function Untitled_2_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%重置
% 重置清空图片 美滋滋
cla(handles.axes1,'reset');
cla(handles.axes2,'reset');% 重置清空动态txt的文字 美滋滋
set(handles.edit1,'string','');
set(handles.edit2,'string','');
set(handles.edit3,'string','');
set(handles.edit4,'string','');
set(handles.edit5,'string','');
set(handles.edit6,'string','');
set(handles.edit7,'string','');
set(handles.edit8,'string','');
set(handles.edit9,'string','');

快乐的时光总是如此短暂的,MATLAB版画图系统就这样完成了

总结

创作工具与载体
传统绘画工具种类繁多,传统的画笔,数位板的笔,鼠标,甚至是大象的鼻子,树枝等等都可以用来作画。传统绘画的载体从传统的层面上来说主要有画纸、器皿、布料等等,后期衍生出了数位板板绘,在电脑上鼠绘等。
非传统的绘画系统的工具是我们的鼠标、键盘的交互方式,按压,点击,拖动都可以成为一种方式,它载体从字面上来说就是各种各样的编程软件的运行界面。
创作体验与技法
传统绘画与非传统绘画的创作体验不能够说哪种更好,两者各有千秋。
这个学期的速写课使我有机会接触到画画这一块内容,在绘画的过程中我真的很开心,可以去画我想画的东西,但由于我本身的技法水平不高,出来的最终作品可能有些欠缺,但我的体验感还是很满足的,这是我自己的作品。
非传统的绘画对于人们的技法水平的要求会不是那么高,就比如我的这个绘画系统,我本身已经设定好了很多的选项,只需要你去按照我的这个指南去用,就可以出来很好看,动态直观的效果了。创作的体验感是很不错的。
呈现效果与局限性
传统作画有二维也有三维的,软件种类繁多。什么效果都可以有,主要还是静态为主。但是各种软件,各种画画的专有名词,国画,水彩画,印象派,我画个画都要给我推进一个门派的类别里,真的有点心累,可能只有我这么觉得。
非传统绘画,反正已经非传统,管它什么风格,好看就行了,就是这么直白,抓住大众的眼球,生动有趣,但往往可能会接受度参差不齐。

参考连接

[1]https://blog.csdn.net/houyanhua1/article/details/78277165
[2]https://jingyan.baidu.com/article/46650658c65361f549e5f89d.html

绘画系统-MATLAB版相关推荐

  1. 绘画系统-Processing版

    创作了两个版本的绘画系统,MATLAB版请移步https://blog.csdn.net/dont_like_jiemo/article/details/85345407 -------------- ...

  2. 编写一个“绘画系统”

    在最后一次的作业中,老师让我们编写一个"绘画系统",提供一系列绘画材料(例如画笔/颜料/滤镜)给用户操作,以创作出动态/交互的绘画作品.这个绘画系统是对"绘画" ...

  3. 二阶偏微分方程组 龙格库塔法_数值方法(MATLAB版)(原书第3版)[Numerical Methods Using MATLAB,Third Edition]pdf...

    摘要 本书特点 强大的图形表达 宽泛的计算方法 重点科学领域的重要算法 大量可运行的实例 数值方法(MATLAB版)(原书第3版)[Numerical Methods Using MATLAB,Thi ...

  4. 基于交替迭代法的通用型交直流潮流计算方法(matlab版+python版)

    程序名称## 基于交替迭代法的通用型交直流潮流计算(matlab版+python版) 程序功能(对象) 适用于任意大小的交流电网,支持节点和支路的增删: 适用于接入多个直流环节,直流环节内允许接入风光 ...

  5. 数学实验matlab 韩明,数学实验(MATLAB版)[韩明,王家宝,李林 编著] 2012年版

    数学实验(MATLAB版) 作者:韩明,王家宝,李林 编著 出版时间:2012年版 内容简介 <普通高等教育"十二五"规划教材:数学实验(MATLAB版)(第2版)>是 ...

  6. 各种智能优化算法比较与实现(matlab版)

    各种智能优化算法比较与实现(matlab版) 一. 方法介绍 1免疫算法(Immune Algorithm,IA) 1.1算法基本思想 免疫算法是受生物免疫系统的启发而推出的一种新型的智能搜索算法.它 ...

  7. 数学实验matlab 韩明,(面向21世纪)数学实验(MATLAB版)

    [亲,本库图书均为正版新书,因部分图书库存量极少,属于绝版书,有可能因未及时更新库存造成缺货的现象,若遇到缺货情况我们深表歉意并会及时给您退款,不用担心哦!谢谢理解与支持,祝您购物愉快!] 基本信息 ...

  8. 数字信号处理实验matlab版答案刘舒帆,数字信号处理实验(MATLAB版) 刘舒帆,费诺,陆辉 西安电子科技大学出版社 9787560620060...

    商品描述: 基本信息 书名:数字信号处理实验(MATLAB版) 原价:31.00元 作者:刘舒帆,费诺,陆辉 著 出版社:西安电子科技大学出版社 出版日期:2013-7-1 ISBN:97875606 ...

  9. 基于直接法的诺顿谐波潮流计算(matlab版+python版)

    程序名称## 基于直接解耦法的诺顿谐波潮流计算(matlab版+python版) 程序功能(对象) 适用于任意大小的纯交流电网,支持节点和支路的增删: 适用于接入多个风电.光伏等分布式电源: 将DG和 ...

最新文章

  1. 用户接口设计的20个原则
  2. Golang slice原理
  3. 移植uboot第八步:裁剪、修改默认参数、分区
  4. 深入理解并使用python的模块与包
  5. 半导体二极管和晶体三极管
  6. 2019 WAIC | 腾讯张正友:人工智能的热与酷
  7. CheckedComboBoxEdit 重置初始化值的方法
  8. 心电信号去噪(part4)--经验模态分解法(EMD)
  9. Spring MVC表单验证
  10. 如何成为一个技术“牛人”
  11. 3 | Spatial-based GNN/convolution模型之 NN4G
  12. web前端小项目个人实例_Web前端:小程序界面与逻辑项目实训
  13. 图解前端之正则表达式
  14. wordpress如何在多说评论框中设置圆形旋转头像?
  15. 企业私有云技术设计方案
  16. Linux系统tomcat修改端口
  17. 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(4):GPGPU
  18. 【影评】摔跤吧爸爸!
  19. 翻译GDC演讲:《Procedurally Crafting Manhattan for ‘Marvel‘s Spider-Man‘》(在‘漫威蜘蛛侠’中使用程序化的方式精心制作曼哈顿)
  20. Crd(自定义资源类型)2021.12.05

热门文章

  1. 2.STM32F407之HAL库——星星点灯
  2. 电商平台如何构建用户画像?
  3. 键盘拆开重新安装步骤_键盘怎么完全拆卸清理并重新组装?
  4. macOS 应用崩溃日志
  5. Lust(Codeforces Round #446 Div.1-891E)(母函数\生成函数)
  6. Vue3表单验证 单个验证 统一验证 自定验证
  7. NameValuePair
  8. python高分书籍推荐_史上最全的Python书排行榜|你想知道的都在这里
  9. Sentinel-Dashboard-1.8持久化Nacos全网最详细讲解(包含客户端)
  10. figma和sketch应该选择哪个?