2024年认证杯SPSSPRO杯数学建模
D题 AI绘画带来的挑战
原题再现:
2023 年开年,ChatGPT 作为一款聊天型AI工具,成为了超越疫情的热门词条;而在AI的另一个分支——绘图领域,一款名为Midjourney(MJ)的软件,热度完全不亚于ChatGPT。AI绘画技术可以模仿设计师的风格和技巧,自动生成类似于人类设计师的设计作品。AI绘画技术可以应用于各种领域,包括绘画、插画、平面设计等,具有较高的效率和精度,能够大大提高创作效率和创作质量。然而,AI绘画技术也带来了一些挑战和风险。比如对于一些传统的美术设计类赛事组织方来说,AI绘画技术就带来了评奖公平性的挑战,由于一些设计作品很难快速判断出究竟是由AI设计的,还是由人类设计师设计的,所以赛事评奖工作变得异常复杂,当参赛作品较多的时候,很难保证最终的结果公平性,附图就是几幅由MJ软件设计的建筑图片,即使业内人士也不能保证做出准确的判断。请你和你的团队建立合理的数学模型以解答如下问题。
第一阶段问题:
1. 从简单的几何角度,是否可以找到AI绘画中不符合逻辑的地方?
2. 请尝试建立数学模型对图片进行打分,评估这幅图片是由AI绘图软件生成的可能性。
整体求解过程概述(摘要)
在数字时代,人工智能(AI)的发展使得图像生成技术日益成熟,特别是在建筑设计领域,AI绘制的图像能够迅速并准确地呈现设计概念。然而,这也带来了一些挑战,尤其是如何验证一个图像是否为 AI 生成,以及这些图像在几何逻辑上是否符合现实世界的物理和建筑规范。鉴于此,开发一种能够准确识别并评估 AI 生成图像的方法变得尤为重要。
针对问题一:从几何角度分析由MJ软件设计的建筑图片,查找不符合逻辑的地方。本团队首先进行视觉检查,对于每幅图片,寻找比例失调,结构问题。然后进行几何分析,测量角度,比例计算。基于视觉检查和几何分析的结果,发现图1,2,3中均存在较多不合理的地方如下:图1中的多处结构均不合理,一侧窗户显示为拱形顶部,而另一侧则是平顶,这种差异在同一建筑的相同层面上是不常见的。图2中可以看出有多处影子,但是仔细观察可以发现,影子的形状,方向等均不合理。图3中的烟囱,其设计同样违反了常规建筑和结构原则。烟囱的形状和位置在视觉上显得不协调,不符合实用性和安全性的标准。
针对问题二:本团队开发了一个数学模型,以评估图像是否可能由AI绘图软件生成。搜集多张真实图片并通过精心定义和提取真实图像与AI生成的图像特征,如线条的直线度、角度的精确度和透视点的一致性,纹理,光照一致性等特征,设立了一个详尽的评分系统。这些特征通过应用Canny边缘检测算法和霍夫变换进行量化,从而准确识别和评估图像中的直线和角度。建立的打分机制基于透视偏差、结构违规、纹理一致性和光照一致性等关键参数,最终得到AI生成图片的得分为97,真实图片的得分为67.通过对AI生成和真实图像的详细比较分析,发现AI生成的图像在光照和纹理处理上的表现通常较差,而结构和透视点则显示出更高的偏差。通过实际图像与AI图像的对比,深入了解两者在特征表现上的相似之处和差异。这种综合评分和分析方法为自动化图像来源验证提供了一个有效的技术途径。
问题重述:
随着人工智能技术的飞速发展,AI在各个领域的应用日益广泛,其中AI绘画技术成为了近年来的一个热点。2023年,AI绘画软件,尤其是名为Midjourney(MJ)的软件,与聊天型AI工具ChatGPT一样,成为了公众和媒体关注的焦点。AI绘画技术能够模仿人类设计师的风格和技巧,自动生成与人类设计师作品风格相似的设计作品。这种技术在绘画、插画、平面设计等多个领域都显示出了巨大的应用潜力,因为它不仅能够以较高的效率和精度完成设计任务,还能够显著提升创作的质量。
然而,随着AI 绘画技术的广泛应用,也出现了一系列挑战和风险。特别是在美术设计类比赛中,AI绘画技术的应用引发了关于评奖公平性的广泛讨论。问题在于,一些由AI 设计的作品与人类设计师的作品在视觉上几乎没有区别,使得评委难以判断作品的真正作者,从而影响了比赛的公平性和结果的准确性。此外,当参赛作品数量众多时,确保评审过程的公正性和有效性变得更加困难。
鉴于这一背景,数学建模比赛提出了一个紧密关联实际应用的问题:如何建立一个合理的数学模型,从简单的几何角度找出 AI 绘画中可能存在的不符合逻辑之处,并评估一幅图片是否由AI 绘图软件生成的可能性。这个问题不仅涉及数学、计算机视觉和机器学习领域的知识,还需要参赛者理解AI绘画技术的基本原理和应用场景。 通过解决这一问题,参赛者将为识别和评估 AI 绘画作品提供新的思路和方法,为确保艺术和设计类比赛的公平性贡献自己的力量。此外,这也有助于进一步探索 AI 技术在创意设计领域的应用潜力及其带来的社会、伦理挑战。
问题要求
➢ 从简单的几何角度,是否可以找到 AI 绘画中不符合逻辑的地方?
➢ 请尝试建立数学模型对图片进行打分,评估这幅图片是由 AI 绘图软件生成的可能性。
模型假设:
假设一:透视准确性的一致性
所有真实的建筑图片在透视方面都是准确的,其透视线将准确汇聚于正确的消失点。任何与此相悖的表现都可以被视为AI生成图片的潜在标志。
假设二:结构一致性的物理可行性
真实世界的建筑结构必须遵循物理和建筑规则,如重力法则和力的均衡。AI生成的图像可能无视这些规则,导致出现物理上不可行的结构。
假设三:纹理和材料的逼真度
在真实的建筑图片中,不同材质的纹理应该看起来自然并且过渡合理。AI生成的图像在纹理过渡和材料表现上可能表现出不自然或突兀的特征。
假设四:光影一致性与环境匹配度
真实图片中的光影效果将与环境中的光源位置、强度和颜色相一致。AI生成图像可能在光线投射、阴影长度和方向上存在不一致性。
假设五:比例和尺寸的准确性
真实建筑图片的建筑元素,如门窗、柱子等,其比例和尺寸与现实世界的建筑规范一致。AI生成的图像可能忽略这些比例规则,产生比例失衡的结果。
完整论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:
image = imread('1.jpg');
imshow(image);
>> % 转换为灰度图像
grayImage = rgb2gray(image);
% 边缘检测
edges = edge(grayImage, 'canny');
% 显示边缘
figure;
imshow(edges);
title('Edge Detection');
% Hough 变换检测直线
[H, theta, rho] = hough(edges);
% 显示标准 Hough 变换的结果
figure;
imshow(imadjust(rescale(H)), 'XData', theta, 'YData', rho, 'InitialMagnification',
'fit');
xlabel('\theta (degrees)'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(gca,hot);
% 查找 Hough 变换的峰值
peaks = houghpeaks(H, 5, 'threshold', ceil(0.3 * max(H(:))));
% 超过 Hough 变换峰值的直线
lines = houghlines(edges, theta, rho, peaks, 'FillGap', 5, 'MinLength', 7);
% 显示原图及检测到的直线
figure, imshow(grayImage), hold on
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
% 绘制开始点
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
% 绘制结束点
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
end
hold off;
% 读取图像
image = imread(imgPath);
% 显示图像
figure;
imshow(image);
title('Original Image');
>> % 转换图像为灰度
grayImage = rgb2gray(image);
% 应用 Canny 边缘检测
edges = edge(grayImage, 'canny');
% 显示边缘检测结果
figure;
imshow(edges);
title('Canny Edge Detection');
>> % 执行霍夫变换
[H, theta, rho] = hough(edges);
% 查找霍夫变换的峰值
peaks = houghpeaks(H, 5, 'threshold', ceil(0.3*max(H(:))));
% 提取直线
lines = houghlines(edges, theta, rho, peaks, 'FillGap', 20, 'MinLength', 40);
% 显示原图及检测到的直线
figure, imshow(grayImage), hold on
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
% 标记线条端点
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
end
title('Detected Lines');
hold off;
% 定义Excel文件路径
files = {
'D:\认证杯\ 真实图片1_Data.xlsx',
'D:\认证杯\ 真实图片2_Data.xlsx',
'D:\认证杯\真实图片3_Data.xlsx'
};
% 初始化空cell array来存储数据
allData = {};
% 循环读取每个文件
for i = 1:length(files)
% 读取Excel文件
data = readtable(files{i});
% 检查并显示数据的大小
disp(['Data from ', files{i}, ':']);
disp(size(data));
% 将数据存储在cell array中
allData{end+1} = data;
end
% 检查所有数据表是否具有相同的列数
numCols = size(allData{1}, 2);
consistent = all(cellfun(@(x) size(x, 2) == numCols, allData));
% 如果所有数据表列数一致,则合并它们
if consistent
mergedData = vertcat(allData{:});
disp('All data tables have the same number of columns.');
else
error('Not all data tables have the same number of columns.');
end
% 显示合并后的数据的一些信息
disp('Merged data size:');
disp(size(mergedData));
% 保存合并后的数据到新的Excel文件
writetable(mergedData, 'D:\认证杯\\Merged_Data.xlsx');
disp('Merged data saved to D:\认证杯\\Merged_Data.xlsx');
end