文章目录
- 💯前言
- 💯什么是构图
- 为什么Midjourney要使用构图
- 💯三分线构图
- 特点
- 使用场景
- 提示词书写技巧
- 测试
- 💯小结
💯前言
【AI绘画】Midjourney进阶:对称构图详解 https://blog.csdn.net/2201_75539691?type=blog
- 在上一篇文章中,我们深入探讨了构图的定义以及学习构图的重要性。我们详细介绍了对称构图的概念、特点及其在Midjourney中的应用方式,帮助大家理解如何通过对称性提升画面的平衡感和视觉冲击力。接下来,本文将继续为大家介绍另一种常用且经典的构图技巧——三分线构图(又称黄金分割构图)。通过对这一构图法则的分析与应用示例,希望能够帮助大家在AI绘画创作中更加精准地掌握构图技巧,提升作品的美感与表现力。
Midjourney官方使用手册
💯什么是构图
构图是摄影、绘画、设计等视觉艺术中的一个基本概念。它指的是艺术家如何在二维平面上安排元素,包括形状、线条、色彩、质地、空间等,以达到一定的视觉效果和艺术表达。
为什么Midjourney要使用构图
- 简单来说,Midjourney有构图词画面质量更高
- 构图的目标是引导观众的视线,突出主题,增加视觉吸引I力,以及传达艺术家的观点或情感。
-
在Midjourney中使用构图是非常重要的,有两个方向可以解释其必要性:非共性和共性。
-
从非共性的角度来看,在Midjourney中使用构图相关的提示词可以显著提升生成画面的质量。这是因为Midjourney的模型在训练时,不仅使用了图像,还结合了与这些图像相关的提示词。通常来说,这些图像来源于专业摄影或高质量渠道,具有较高的视觉标准。当模型学习了这些图片与提示词之间的关联后,用户在生成图像时如果使用了构图相关的提示词,系统会优先选择类似图库中的优质素材,从而生成更为精致的画面。因此,通过使用构图提示词,可以明显地提高生成图像的质量。
-
从共性的角度来说,构图本身就是一种极为有效的手段,可以用于引导观众的视线、突出画面的主题、增强视觉吸引力,并传递创作者的情感和观点。构图所带来的这些视觉上的提升效果,是不受具体工具限制的,无论是在摄影、绘画还是AI生成图像中都是通用的。因此,当在Midjourney中使用构图提示词时,画面的质量提升几乎是必然的结果。这些道理或许听起来有些抽象,但在实际操作和练习时,大家会切实地感受到构图带来的效果提升。
-
💯三分线构图
三分线构图
,又被称为黄金分割构图,是构图中最常用的一种构图法则。这种构图法则的基本原理是将画面分割为九等份,由两条垂直线和两条水平线相交形成,主体或重要元素放在这四条线或者交点上。
- 三分线构图,也被称为黄金分割构图,是一种非常常用的构图法则。如果你对摄影有一定了解,可能会熟悉这个构图技巧。而对于刚开始接触摄影的人来说,使用三分线构图可以显著提升照片的视觉效果。其基本原理是将画面分为九等份,由两条垂直线和两条水平线交叉形成网格。画面的主体或重要元素通常放置在这四条线的交点上,或者沿着这些线来进行布局。
特点
平衡感:三分线构图可以使画面的视觉重心分布均匀,使画面看上去更加稳定和平衡。
画面美感:三分线构图符合人类的视觉习惯和审美规律,能够使画面看上去更加和谐和美观。
- 三分线构图的第一个特点是平衡感。虽然不像对称构图那样完全均衡,但它通过将画面分成三分之一和三分之二的比例,使得视觉重心得到均匀分布,从而让画面整体看上去更加稳定且具有平衡感。
- 第二个特点是画面美感。三分线构图符合人类的视觉习惯和审美规律,能够让画面显得更加和谐、美观。即使没有设计背景的人,也会因为这种构图形式的自然规律,感受到画面的美感和愉悦感。
使用场景
在风景图片中
,通过使用三分线构图,可以有效地表现出天空和地面的比例关系。
在人像图片中
,通过使用三分线构图,可以使人物的位置和背景的比例更加协调。
在建筑图片和静物图中
,通过使用三分线构图,可以使建筑或静物的位置和周围环境的关系更加和谐。
-
三分线构图在多种场景中都有着广泛的应用。在风景摄影中,三分线构图能够很好地展现天空与地面之间的比例关系,营造出更加和谐的视觉效果。
-
在人像摄影中,通过三分线构图,人物的位置与背景的比例能够更加协调,使得整体画面更加平衡且富有美感。
-
除此之外,在建筑摄影或静物摄影中,三分线构图也非常实用。它能够巧妙地将建筑或静物与周围环境的关系表现得更加和谐。
- 无论是在光影对比上,还是元素布局上,这种构图都能使画面呈现出更加平衡的视觉效果。例如,当一侧的元素较重时,通过在另一侧放置主体人物,可以瞬间让画面变得更为平衡。
提示词书写技巧
- 在书写与三分线构图相关的提示词时,使用Rule of Thirds composition可以帮助Midjourney生成更加符合黄金分割比例的图像。这个提示词会让图像中的主体或关键元素自动排列在画面的三分线交点上,从而实现更加和谐的视觉效果。无论是风景、人像还是建筑等场景,通过这个提示词可以让画面更具美感,符合人类自然的视觉习惯。因此,建议在创作中结合其他细节描述,例如“cinematic light”或“8k”,来进一步提升画面的整体质量和表现力。
测试
原图:
serene forest, river flowing through mountains, vibrant autumn colors, sun setting, reflections on water, ultra detailed, cinematic light, 8k --ar 16:9
- 在原图中,画面中的各个元素,比如河流、山脉和树木的布局显得相对自由、分散。虽然画面整体色彩和光影表现良好,但视觉重点不够明确,观众的视线可能会在画面中自由游走,缺少一个明显的视觉引导。
原图+Rule of Thirds composition:
serene forest, river flowing through mountains, vibrant autumn colors, sun setting, reflections on water, Rule of Thirds composition, ultra detailed, cinematic light, 8k --ar 16:9
- 当加入三分线构图后,画面中主要的视觉元素被精确地放置在三分线的交点或线上。例如,河流的流向和树木的排列都显得更加有序,视觉重心更加清晰。观众的视线自然而然地被引导到画面中的重点区域,从而增加了画面的平衡感与和谐美。
💯小结
在本文中,我们详细介绍了三分线构图(也称为黄金分割构图)的原理、特点以及实际应用。通过将画面分为九等份,并将主体或重要元素放置在这些分割线或交点上,可以大幅提升图像的平衡感和美感。三分线构图广泛应用于风景、人像和建筑等场景中,能够自然引导观众的视线,增强画面的视觉效果。同时,在使用AI绘画工具如Midjourney时,结合“Rule of Thirds composition”这样的提示词,可以自动优化图像的构图效果,使作品更加符合人类的审美习惯。通过本文的解析和示例,读者可以更深入地理解这一构图技巧,进而在创作中灵活应用,提升作品的表现力。- 展望AI绘画的未来,随着技术的不断进步,AI绘画不仅在技术层面上将愈发成熟,还将在艺术创作中扮演更重要的角色。三分线构图等经典构图技巧的引入,让AI工具如Midjourney不仅能够生成视觉效果出色的作品,还能够遵循艺术创作中的美学法则,帮助创作者精准表达情感和思想。
import torch, torchvision.transforms as transforms; from torchvision.models import vgg19; import torch.nn.functional as F; from PIL import Image; import matplotlib.pyplot as plt; class StyleTransferModel(torch.nn.Module): def __init__(self): super(StyleTransferModel, self).__init__(); self.vgg = vgg19(pretrained=True).features; for param in self.vgg.parameters(): param.requires_grad_(False); def forward(self, x): layers = {'0': 'conv1_1', '5': 'conv2_1', '10': 'conv3_1', '19': 'conv4_1', '21': 'conv4_2', '28': 'conv5_1'}; features = {}; for name, layer in self.vgg._modules.items(): x = layer(x); if name in layers: features[layers[name]] = x; return features; def load_image(img_path, max_size=400, shape=None): image = Image.open(img_path).convert('RGB'); if max(image.size) > max_size: size = max_size; else: size = max(image.size); if shape is not None: size = shape; in_transform = transforms.Compose([transforms.Resize((size, size)), transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))]); image = in_transform(image)[:3, :, :].unsqueeze(0); return image; def im_convert(tensor): image = tensor.to('cpu').clone().detach(); image = image.numpy().squeeze(); image = image.transpose(1, 2, 0); image = image * (0.229, 0.224, 0.225) + (0.485, 0.456, 0.406); image = image.clip(0, 1); return image; def gram_matrix(tensor): _, d, h, w = tensor.size(); tensor = tensor.view(d, h * w); gram = torch.mm(tensor, tensor.t()); return gram; content = load_image('content.jpg').to('cuda'); style = load_image('style.jpg', shape=content.shape[-2:]).to('cuda'); model = StyleTransferModel().to('cuda'); style_features = model(style); content_features = model(content); style_grams = {layer: gram_matrix(style_features[layer]) for layer in style_features}; target = content.clone().requires_grad_(True).to('cuda'); style_weights = {'conv1_1': 1.0, 'conv2_1': 0.8, 'conv3_1': 0.5, 'conv4_1': 0.3, 'conv5_1': 0.1}; content_weight = 1e4; style_weight = 1e2; optimizer = torch.optim.Adam([target], lr=0.003); for i in range(1, 3001): target_features = model(target); content_loss = F.mse_loss(target_features['conv4_2'], content_features['conv4_2']); style_loss = 0; for layer in style_weights: target_feature = target_features[layer]; target_gram = gram_matrix(target_feature); style_gram = style_grams[layer]; layer_style_loss = style_weights[layer] * F.mse_loss(target_gram, style_gram); b, c, h, w = target_feature.shape; style_loss += layer_style_loss / (c * h * w); total_loss = content_weight * content_loss + style_weight * style_loss; optimizer.zero_grad(); total_loss.backward(); optimizer.step(); if i % 500 == 0: print('Iteration {}, Total loss: {}'.format(i, total_loss.item())); plt.imshow(im_convert(target)); plt.axis('off'); plt.show()