文章目录

  • 手动测量
    • 手工测量结果
  • 算法计算
    • 算法流程
    • 详细介绍
      • 笔画长度
      • 高宽比
      • 重心
      • 面积
      • 特征点聚类
    • 分析结果

观赏者对书法的感受都来源于书法形态,为了探索”形态-感受“的关联性,本篇博客针对古代十二个“一”进行了数据分析。进行了客观的评价,探索其量化结果与人的主观感受之间的相关性。整体流程分为两步:一、手动测量选定的参数;二、利用图像处理的相关算法,结合书法的特征,对图像的相关度量指数进行详细的分析。

手动测量

由于是基于像素点的测量,因此手动测量依靠PS,获取像素点的坐标等进行计算:

手工测量结果

算法计算

第二步是利用相关算法,对12个“一”进行更加精确的分析,采用的平台是MATLAB 2019a。

算法流程

算法整体流程描述如下:
叙述一下主要的预处理操作。首先,读取一张图片,实验获得的图片是一些大小已经处理好的图片,归一化的步骤可以省略。
之后需要将图片转化为MATLAB能够处理的double格式的图片,将图片转化为灰度图,进行去噪。去噪的过程有可能需要手工进行。这里提供了两种方案:
(1)滤波;
(2)闭运算;
涉及到下图所示的噪点非常大的图片,只能通过闭运算进行处理。但是经过闭运算处理后的图片有可能无法呈现原始的效果,因此,为了消除实验干扰,对难以去噪的图片采用了手工预先去噪的方式。
去噪之后,将图像二值化,然后进行膨胀,填充孔洞。并且保留一个副本,用于提取特征点以及获得面积。
然后对图像进行细化运算,获得图像的骨架。
填充空洞后的图像如下:

详细介绍

笔画长度

笔画长度用来表现笔画基元的骨架规模,实际上是统计笔画骨架初始像素到终止像素中所有像素点的个数。
针对于第一个一,骨架为图中白色部分,笔画长度就是白色像素的个数。需要进行遍历。

function [length] = getLength(Img_Input)
%GETLENGTH 此处显示有关此函数的摘要
%   此处显示详细说明
Img=Img_Input;
Img = bwmorph(Img,'thin',Inf);%进行细化操作
[rows,cols]=size(Img);
length=0;
for i=1:rowsfor j=1:colsif Img(i,j)==1length=length+1;endend
end
end

高宽比

不同的书法家,书法的高宽比是存在差异的,公式如下:

高宽比实际上就是书法的最小包络矩形的高宽比,即下图中的H/W:
体现在代码中,实际上就是获得最小的包络矩形:

function [res] = getAspectRatio(Img_Input)
%GETASPECTRATIO 此处显示有关此函数的摘要
%   此处显示详细说明
Img=Img_Input;
pos=zeros(1,2);
[rows,cols]=size(Img);
index=1;
for i=1:rowsfor j=1:colsif Img(i,j)==1pos(index,:)=[i,j];index=index+1;endend
end
row_max=max(pos(:,1));%最高点
row_min=min(pos(:,1));%最低点
col_max=max(pos(:,2));%最右点
col_min=min(pos(:,2));%最左点
res=(row_max-row_min)/(col_max-col_min);
end

重心

宽扁的书法字符几何重心偏低,瘦高的书法字符几何重心偏高,假设书法骨架矩阵为g(i,j),书法的重心位置公式为:
代码如下:

function [res] = getGravity(Img_Input)
%GETGRAVITY 此处显示有关此函数的摘要
%   此处显示详细说明
Img=Img_Input;
[rows,cols]=size(Img);
X=0;
Y=0;
All=0;
for i=1:rowsfor j=1:colsAll=All+Img_Input(i,j);X=X+i*Img_Input(i,j);Y=Y+j*Img_Input(i,j);end
end
x_res=X/All;
y_res=Y/All;
res=[x_res,y_res];
end

面积

考虑到书法的每一个字的体积代表着不同的美感,书法的面积是书法高矮胖瘦的主要体现,因此,添加了一个新的指标,书法的面积,采用的方式的利用区域生长算法,求出图像中字体所在像素的数量作为面积,利用了一个栈(在MATLAB中,用一个矩阵代替),并且通过四领域搜索的方式获得像素点的个数。
利用区域生长算法,提取出值为1的区域。因为只有两个值,这里不需要设计参考模板来标记已经遍历过的点,步骤如下:
(1) 遍历图像寻找像素为1的点;
(2) 以这个种子为起点,顺时针搜索上下左右四个领域
(3) 如果值为1,那么纳入;
(4) 如果还能继续寻找,就回到(2),否则结束
搜索像素采用了四领域的方式,如下图:

function [area] = getArea(Img)
%GETAREA 此处显示有关此函数的摘要
%   此处显示详细说明
I=Img;
[rows,cols]=size(I);
Ib = I;
Ref=zeros(size(Ib));Domain=zeros(1,2,1);%所有页的长度都相同,小的补零
DomainSize=zeros(1,1);
d_z=1;
Stack=zeros(1,2);
for i=1:rowsfor j=1:colsif Ib(i,j)==1&&Ref(i,j)==0d_xy=1;s_l=1;Domain(d_xy,:,d_z)=[i,j];Stack(s_l,:)=[i,j];Ref(i,j)=1;d_xy=d_xy+1;s_l=s_l+1;while s_l>1i_t=Stack(1,1);j_t=Stack(1,2);Stack(1,:)=[];s_l=s_l-1;if j_t+1<=cols&&Ib(i_t,j_t+1)==1&&Ref(i_t,j_t+1)==0Domain(d_xy,:,d_z)=[i_t,j_t+1];Stack(s_l,:)=[i_t,j_t+1];Ref(i_t,j_t+1)=1;d_xy=d_xy+1;s_l=s_l+1;endif i_t-1>0&&Ib(i_t-1,j_t)==1&&Ref(i_t-1,j_t)==0Domain(d_xy,:,d_z)=[i_t-1,j_t];Stack(s_l,:)=[i_t-1,j_t];Ref(i_t-1,j_t)=1;d_xy=d_xy+1;s_l=s_l+1;endif j_t-1>0&&Ib(i_t,j_t-1)==1&&Ref(i_t,j_t-1)==0Domain(d_xy,:,d_z)=[i_t,j_t-1];Stack(s_l,:)=[i_t,j_t-1];Ref(i_t,j_t-1)=1;d_xy=d_xy+1;s_l=s_l+1;endif i_t+1<rows&&Ib(i_t+1,j_t)==1&&Ref(i_t+1,j_t)==0Domain(d_xy,:,d_z)=[i_t+1,j_t];Stack(s_l,:)=[i_t+1,j_t];Ref(i_t+1,j_t)=1;d_xy=d_xy+1;s_l=s_l+1;endendDomainSize(d_z)=d_xy-1;d_z=d_z+1;endend
end
[area,~]=max(DomainSize);%返回字体的面积
end

特征点聚类

考虑到不同的书法,应该具有不同的特征点,这些特征点可以进行聚类,聚类之后的簇的数目代表着不同的特征数目。这里考虑使用Harris算法提取书法的角点,然后使用K-means聚类对特征点进行聚类。获取图像的特征点的数目。
为了使得聚类数目合理,采用轮廓系数评价聚类指标,选出最优的聚类方案。
轮廓系数评价的代码如下:

%Silhouette Coefficient评价分类效果
S=zeros(1,1);
S_index=1;
for c=1:N%每一个簇Ct=X(Idx==c,:);for i=1:size(X(Idx==c,1),1)%簇中的每一个样本dis=zeros(N-1,1);dis_index=1;for c2=1:Nif c2~=cCt2=X(Idx==c2,:);diff=ones(size(Ct2));diff(:,1)=Ct(i,1)*diff(:,1);diff(:,2)=Ct(i,2)*diff(:,2);Ct2=Ct2-diff;Ct2=Ct2.^2;dis(dis_index)=sum(sum(Ct2))/size(Ct2,1);dis_index=dis_index+1;endend%选出这个样本点到最近簇的所有样本的平均距离[mindis]=min(dis);%求出这个样本点到本簇的其他样本的平均距离diff2=ones(size(Ct));diff2(:,1)=Ct(i,1)*diff2(:,1);diff2(:,2)=Ct(i,2)*diff2(:,2);Ctt=Ct-diff2;Ctt=Ctt.^2;dis2=sum(sum(Ctt))/(size(Ctt,1)-1);%减一去掉自己s=(mindis-dis2)/max(mindis,dis2);S(S_index)=s;S_index=S_index+1;end
end

对于每一个“一”,原图和聚类后的结果如下:

分析结果

(1)手动测量实际上尝试了凭借自己的感官进行度量,在实际的表格中也有一部分体现,但是为了准确性,部分难以测量的程序还是利用了PS获取像素点坐标;
(2)手动测量获得聚类数目,实际上先进行了一个测试,获取一幅书法的大致的分类数,然后据此进行推测,结果显示推测结果并不准确;
(3)对于重心和笔画长度,基本上能够获得很好的预测结果,手动测量的结果和代码测得的结果基本一致;
(4)针对于“一”这个汉字,书法的聚类数目经过测算大多数都是3,只有极少数特征非常明显的书法的聚类数目超过了3,即:
实际上,肉眼能够看出,这几幅图像的特征相比而言非常明显;例如第三幅图,有着明显的拐点,反之去观察其他的图像,可以看到,排除这三幅图之外,图像的特征确实不够明显,基本上是一条笔直的直线;

对于图像的特征值聚类获得了较好的分析效果。
(5)由于“一”的共性,所有的“一”都有着基本相似的宽高比,在0.7-0.8之间,这应该是受到了书法形态本身的影响;
(6)关于“一”的面积,测量结果上并没有显示出值有价值的数据,仅仅是体现了用墨量的多少;

本次实验的最重要的结论是,图像的特征越明显,那么其特征点的聚类数目就会越多。

“一”的客观形态与主观感受之间的关联性研究相关推荐

  1. ”一“的客观形态与主观感受之间的关联性研究

    目录 "一"的客观形态与主观感受之间的关联性研究 概述 研究主题与内容 研究主题 研究内容 特征定义 长度 走势 正向相对扰动度 正向最大扰动度点相对位置 面积 周长 重心位置 黑 ...

  2. 雪梨对”一“的客观形态与主观感受之间的关联性研究

    逻辑上而言,每个"一"的感受都来源于其形态,那么我们不禁要问,各个"一"带来的不同感受与它们的形态有何关联呢?为了探索"形态-感受"的关联性 ...

  3. 视频帧率对人眼主观感受的影响

    Yen-Fu Ou等人在论文<MODELING THE IMPACT OF FRAME RATE ON PERCEPTUAL QUALITY OF VIDEO>中研究了帧率对人眼主观感受的 ...

  4. 客观指标VS主观质量:拨开遮挡高清视频技术的迷雾

    金山云将在LiveVideoStackCon 2020北京站发布金山云图像视频感知评价指标Kingsoft Cloud Perceptual Assessment(KPA),这也是金山云与香港城市大学 ...

  5. 网络中延迟对主观感受的影响

    T. Hossfeld等人在论文<INITIAL DELAY VS. INTERRUPTIONS: BETWEEN THE DEVIL AND THE DEEP BLUE SEA>中,研究 ...

  6. 视频帧率对人眼主观感受的影响 2

    Quan Huynh-Thu等人在论文<PERCEIVED QUALITY OF THE VARIATION OF THE VIDEO TEMPORAL RESOLUTION FOR LOW B ...

  7. Nature子刊:基于海马功能连接预测模型预测个体对压力的主观感受

    <本文同步发布于"脑之说"微信公众号,欢迎搜索关注~~> 一.摘要 尽管我们生活中经常会感到压力,但是这种体验背后的生理机制目前是不清楚的.本文的作者研究了海马到全脑在 ...

  8. 啤酒与尿布?挖掘商品之间的关联性分析(1):机器学习之Apriori算法

    从这个贸易战看:强权即是真理,没有所谓的自由贸易和平等.中国之大已容不下一个安静的键盘.不过是又一次鸦片战争.除了愤怒还是愤怒,除了一心想为崛起而澎湃还是一心想为崛起而澎湃.中华文明三四千年的历史都是 ...

  9. 数据分析的统计方法选择小结(变量之间的关联性分析)

    数据分析的统计方法选择小结(变量之间的关联性分析) 一.两个变量之间的关联性分析 1.两个变量均为连续型变量 1)小样本并且两个变量服从双正态分布,则用Pearson相关系数做统计分析 2)大样本或两 ...

最新文章

  1. java json发送文件_关于java:REST API设计在同一请求中将JSON数据和文件发送到api...
  2. 90%的人会遇到性能问题,如何用1行代码快速定位?
  3. HDU1756(判断一个点是否在多边形内)
  4. JDBC——jdbcUtils加载配置文件赋值
  5. MySQL安装及root密码初始化
  6. python 组合数库函数_Python数据分析之Numpy库(笔记)
  7. sql limit不接具体数字_SQL别再秀操作了,这么写吧还是。
  8. WEB前端学习五 js什么是引用类型
  9. 在.Net Core中实现一个WebSocket路由
  10. React开发(267):ant design upload简单上传
  11. 电子工程可以报考二建_非工程类专业也能报考二建吗?
  12. 【Pygame】屏幕图形绘制
  13. [20160325]bbed是否有4G的限制.txt
  14. 超效率dea matlab,求高人帮忙关于超效率DEA模型编程
  15. Photoshop教程一:精细选择工具
  16. python删除重复文件
  17. 卸载并安装NVIDIA显卡驱动
  18. 如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹
  19. 定时器node-schedule使用
  20. 为什么我的世界服务器显示红叉,小学生在试卷上答题画《我的世界》合成表?玩家:玩MC上头了!...

热门文章

  1. PTA 1015 德才论 (25分) ,满分代码 + 测试点报错解决
  2. 美国普渡大学 计算机科学,普渡大学西拉法叶分校计算机科学系怎么样?
  3. SparkSQL视图
  4. Android hal 层 C 堆栈打印方法
  5. 计算机等级考试进制转换,计算机各种进制转换练习题(附答案) .doc
  6. 软件加密保护技术简介
  7. [机器学习] 机器学习笔记_csv文件格式特点
  8. 网络工程师常见面试问题
  9. 第十周计算个人所得税
  10. MULTISIM仿真HCNR200线性光耦模拟量隔离电路