---
title: Siluetteihin perustuva parametrinen 3D-mallinnus agenttien avulla
description: Uusimpia tekoälymalleja hyödyntävä, siluetteihin perustuva agenttien työnkulku tekee tämän mahdolliseksi käytännössä.
lang: fi
articleId: silhouette-modeling
translationKey: silhouette-modeling
version: 1
permalink: /fi/articles/silhouette-modeling/
revisionSummary: Ensimmäinen suomenkielinen versio.
pubDate: 2026-10-04
tags: [3d-modeling, segmentation, agents]
draft: false
illustrated: true
showDescription: false
contents: true
preserveText: true
---

Uusimmat tekoälymallit ovat jo todella hyviä 3D-mallinnuksessa. Ne osaavat mallintaa esineen pelkkien kuvien perusteella. Oikealla prosessilla ne voivat luoda parametrisen mallin ja saada mitat kohdalleen pelkästään yhden esineestä mitatun mitan avulla. Uusimmat tekoälymallit ja siluetteihin perustuva mallinnusprosessi tekee tämän mahdolliseksi käytännössä.

Aiemmassa artikkelissa kerroin ompelukoneen moottorin moottorin mallintamisesta 20 kuvan avulla. Mallinnus käytti agenteille suunniteltua työnkulkua, joka ammentaa inspiraatiota structure-from-motion-menetelmästä [@alatalo2026motor]. Menetelmä toimi todella hyvin! Interaktiivinen demo löytyy täältä: <https://janne-alatalo.github.io/agentic-structure-from-motion> Menetelmä toimii niin, että agentti tunnistaa kuvista piirteitä ja yhdistelee niitä kuvien välillä. Agentti käyttää tunnistettuja piirteitä 3D-mallin rakentamiseen sekä kameroiden sijainnin ja linssin projektioparametrien arviointiin.

Vaikka tulokset olivat todella hyviä, niin työnkulussa oli vielä parannusvaraa. Se ei ole kovin tehokas ja vaatii edelleen melko paljon kuvia, vaikka se onkin selvä parannus perinteiseen structure-from-motion-menetelmään verrattuna.

Tuon projektin aikana kokeilin nopeasti, että voisiko siluetteihin perustuvaa optimointia käyttää kameroiden sijaintejen ja suunnan arviointiin sekä moottorin mallintamiseen. Tulokset olivat todella lupaavia. Näytti siltä, että siluetteihin perustuva menetelmä olisi tehokkaampi ja se toimisi vähemmällä kuvamäärällä.

Siluetteihin perustuvassa menetelmässä 3D-malli sekä kameroiden sijainnit ja suunnat arvioidaan kuvista segmentoitujen siluettien avulla. Siluetti on 2D-tasolle projisoidun 3D-kohteen varjokuva. Kuva 1 havainnollistaa ajatusta. Eri 2D-tasot esittävät näkymiä eri kamerakulmista.

<figure class="article-figure" id="figure-1">
  <a class="figure-image " href="/images/articles/silhouette-modeling/silhouette-geometry-full.webp" aria-label="Avaa kuva 1 täydessä tarkkuudessa">
    <img src="/images/articles/silhouette-modeling/silhouette-geometry-1200.webp" srcset="/images/articles/silhouette-modeling/silhouette-geometry-640.webp 640w, /images/articles/silhouette-modeling/silhouette-geometry-1200.webp 1200w, /images/articles/silhouette-modeling/silhouette-geometry-1920.webp 1920w, /images/articles/silhouette-modeling/silhouette-geometry-full.webp 2800w" sizes="(min-width: 1008px) 960px, (min-width: 900px) calc(100vw - 48px), (min-width: 778px) 730px, calc(100vw - 48px)" width="2800" height="2066" alt="Sohvapöydän malli projisoituna kolmelle kuvatasolle. Jokaisessa näkymässä on kamera ja siluetti." loading="lazy" decoding="async" />
  </a>
  <figcaption>Kuva 1. Esimerkki 3D-kohteen siluetista kolmeen kamerakulmaan.</figcaption>
</figure>

Ajatus siluettien käyttämisestä mallinnuksessa ei ole uusi. Siluetteja käytetään jo kameroiden sijaintien ja suuntien arviointiin [@wu2020silhouette] sekä 3D-polygoniverkkojen optimointiin [@worchel2022mesh]. En ole kuitenkaan nähnyt muiden käyttävän menetelmää modernien tekoälymallejen ja agenttien kanssa.

Nykyaikaiset tekoälyagentit mahdollistavat paremman siluetteihin perustuvan 3D-mallinnusprosessin. Agentit voivat luoda kuvissa näkyvästä esineestä säädettävän parametrisen mallin ja etsiä optimointialgoritmien avulla parhaat parametriarvot mallin säädettäville ominaisuuksille. Tämä yksinkertaistaa optimointiongelmaa verrattuna polygoniverkkoon perustuvaan mallinnukseen, koska optimointialgoritmille tuodaan huomattavasti vähemmän parametreja optimoitavaksi. Jotta menetelmä toimii, vaaditaan kuitenkin tarpeeksi älykäs tekoälymalli tuottamaan alustava parametrinen 3D-malli, joka kuvaa kuvassa näkyvää esinettä tarpeeksi hyvin. Onneksi uusimmilla tekoälymalleilla on erittäin hyvä tietämys miten todellinen maailma toimii ja hyvä avaruudellinen hahmottaminen, joten ne pystyvät tekemään jo ensimmäisestä 3D-mallista riittävän hyvän, niin että 3D-mallin parametrien optimointi saadaan käyntiin.

## Siluettien segmentointi kuvista kuvamallien avulla

Kun työstin tuota edellistä artikkelia, niin kokeilin Metan SAM 3 -mallia esineiden siluettien segmentointiin kuvista [@carion2025sam3]. Harmittavasti tuo malli on todella tyhmä. Se ei esimerkiksi ymmärtänyt, mikä hihnapyörä on. Kehote ”large disk” (”suuri kiekko”) toimi ompelukoneen moottorin hihnapyörän segmentoinnissa, mutta se on huono kikka kiertää tuo rajoite. Mallia oli mahdotonta saada segmentoimaan tarkempia yksityiskohtia kuvista.

Sain segmentoinnin toimimaan tuon kikan avulla niin, että pystyin testaamaan tuota siluetteihin perustuvaa mallinnusta. Testin perusteella näin, että tuo menetelmä kyllä toimii ja olin melko varma, että jos segmentointi toimisi paremmin, niin tuo koko prosessi toimisi erittäin hyvin. Valitettavasti SAM 3 -mallin segmentointitarkkuus oli liian huono tukemaan tuota menetelmää.

Ajatus segmentointiin perustuvasta 3D-mallinnuksesta jäi takaraivoon. Luin Qwen-Image 2.1 -mallin julkaisusta kertovan blogikirjoituksen, ja sen kuvankäsittelykyky yllätti minut [@qwen2026image21]. Tuo julkaisusta kertova blogikirjoitus muistutti minua myös Pedicinin hienosta demosta [@pedicini2025editing], joka havainnollistaa kuvamallien kykyä muokata kuvaa niin, että sen muut osat säilyvät täsmälleen ennallaan.

Keksin, että tätä ominaisuutta voisi käyttää segmentointiin. Kuvamallia ohjeistetaan muuttamaan vain osaa kuvasta. Esimerkiksi: ”Korosta tämän kuvan sohvapöytä magentalla ja väritä ylimääräiset tavarat syaanilla.” Muokkauksen jälkeen alkuperäisestä ja muokatusta kuvasta lasketaan erotuskuva. Tulosta voidaan käyttää segmentointiin. Kuva 2 havainnollistaa prosessia OpenAI:n ChatGPT Images 2.5 -mallilla [@openai2026images25].

<figure class="article-figure" id="figure-2">
  <a class="figure-image workflow-image" href="/images/articles/silhouette-modeling/segmentation-workflow-full.webp" aria-label="Avaa kuva 2 täydessä tarkkuudessa">
    <img class="workflow-overview" src="/images/articles/silhouette-modeling/segmentation-workflow-1200.webp" srcset="/images/articles/silhouette-modeling/segmentation-workflow-640.webp 640w, /images/articles/silhouette-modeling/segmentation-workflow-1200.webp 1200w, /images/articles/silhouette-modeling/segmentation-workflow-1920.webp 1920w, /images/articles/silhouette-modeling/segmentation-workflow-full.webp 3564w" sizes="(min-width: 1008px) 960px, (min-width: 900px) calc(100vw - 48px), (min-width: 778px) 730px, calc(100vw - 48px)" width="3564" height="1144" alt="Kolme vaihetta: alkuperäinen valokuva sohvapöydästä, muokattu kuva, jossa pöytä on magenta ja ylimääräiset tavarat syaaneja, sekä näiden perusteella muodostettu segmentointikartta." loading="lazy" decoding="async" />
    <span class="workflow-panels" aria-hidden="true">
      <span class="workflow-panel panel-1"><img src="/images/articles/silhouette-modeling/segmentation-workflow-full.webp" width="3564" height="1144" alt="Alkuperäinen valokuva sohvapöydästä, jolla on pöytäliina ja neuletyö." loading="lazy" decoding="async" /></span>
      <span class="workflow-panel panel-2"><img src="/images/articles/silhouette-modeling/segmentation-workflow-full.webp" width="3564" height="1144" alt="Kuvamallin tekemä muokkaus: pöytä on magenta, pöytäliina ja neuletyö ovat syaaneja." loading="lazy" decoding="async" /></span>
      <span class="workflow-panel panel-3"><img src="/images/articles/silhouette-modeling/segmentation-workflow-full.webp" width="3564" height="1144" alt="Segmentointikartta: pöydän näkyvät pikselit ovat magentoja, pöytää peittävät esineet syaaneja ja tausta musta." loading="lazy" decoding="async" /></span>
    </span>
  </a>
  <figcaption>Kuva 2. Sohvapöydän segmentointi OpenAI:n ChatGPT Images 2.5 -mallilla.</figcaption>
</figure>

Kuvassa 3 segmentoinnin ääriviivat on piirretty alkuperäisen kuvan päälle. Tuloksena on todella tarkka pöydän segmentointi.

<figure class="article-figure" id="figure-3">
  <a class="figure-image " href="/images/articles/silhouette-modeling/segmentation-outlines-full.webp" aria-label="Avaa kuva 3 täydessä tarkkuudessa">
    <img src="/images/articles/silhouette-modeling/segmentation-outlines-1200.webp" srcset="/images/articles/silhouette-modeling/segmentation-outlines-640.webp 640w, /images/articles/silhouette-modeling/segmentation-outlines-1200.webp 1200w, /images/articles/silhouette-modeling/segmentation-outlines-1920.webp 1920w, /images/articles/silhouette-modeling/segmentation-outlines-full.webp 2640w" sizes="(min-width: 1008px) 960px, (min-width: 900px) calc(100vw - 48px), (min-width: 778px) 730px, calc(100vw - 48px)" width="2640" height="1980" alt="Alkuperäinen valokuva sohvapöydästä. Pöydän ääriviiva on merkitty magentalla ja pöytäliinan sekä neuletyön ääriviivat syaanilla." loading="lazy" decoding="async" />
  </a>
  <figcaption>Kuva 3. Alkuperäinen kuva ja segmentoinnin ääriviivat.</figcaption>
</figure>

Sen lisäksi, että nämä erittäin tarkkoja, niin nämä nykyaikaiset kuvamallit ovat, ovat myös hyvin älykkäitä. Paljon älykkäämpiä kuin SAM 3 -malli. Niillä voi segmentoida hyvin tarkasti rajattuja kuvan osia. Tätä siluettipohjainen mallinus juuri tarvitsee. Esimerkkikuvassa malli on tunnistanut, ettei neuletyö tai pöytäliina ole osa pöytää, ja segmentoinut ne pöytää peittäväksi esineiksi.

## Agenttien siluetteihin pohjautuva mallinnusprosessi

Kokeilin siluettipohjaiseen mallinnusprosessiin OpenAI:n GPT-6 Astraa ja GPT-6.1 Solia. Molemmat malleista toimivat prosessin kanssa. GPT-6.1 Luna on liian tyhmä ymmärtämään nykyisiä ohjeita. Selkeämmät tai yksityiskohtaisemmat ohjeet saattaisivat saada sen toimimaan, mutta en ole vielä kokeillut sitä. Tällä hetkellä Astra toimii täydellisesti, ja 100 euroa kuukaudessa maksavan tilauksen käyttömäärä riittää minun tämänhetkiseen käyttötarpeeseen. Sen vuoksi en lähtenyt yrittämään optimoida prosessia pienemmälle mallille.

Sohvapöydän tapauksessa prosessi etenee näin: agentti näkee, että kuvissa on sohvapöytä. Se luo säädettävän 3D-mallin, joka muistuttaa kuvien pöytää. Tässä esimerkissä agentti päätyi malliin, jonka parametrit on lueteltu taulukossa 1. Ensimmäinen malli oli hieman yksinkertaisempi, mutta agentti paransi sitä optimoinnin aikana.

<p class="table-caption" id="table-1-caption">Taulukko 1. Optimoitavat parametrit agentin luomassa lopullisessa mallissa.</p>
<div class="table-scroll parameter-table-scroll" tabindex="0" role="region" aria-label="Taulukko 1, vieritä tarvittaessa vaakasuunnassa">
<table class="parameter-table" aria-labelledby="table-1-caption">
  <thead><tr><th scope="col">Pöydän osa</th><th scope="col">Parametrit</th><th scope="col">Lukumäärä</th></tr></thead>
  <tbody>
    <tr><td>Kokonaisuus / pöydän kansi</td><td>Pöydän korkeus, kannen paksuus, alapinnan sisennys, kulmien pyöristyssäde</td><td>4</td></tr>
    <tr><td>Jalat ja niiden sijoittelu</td><td>Jalkojen etäisyys kannen reunoista, jalan yläosan leveys, jalan alaosan leveys, kapenemisen alkamiskorkeus, alaosan siirtymä, jalan syvyysmitan säätö, reunaetäisyyden säätö syvyyssuunnassa</td><td>7</td></tr>
    <tr><td>Hylly</td><td>Korkeus ja paksuus</td><td>2</td></tr>
    <tr><td>Kannen alla olevat kehyslistat</td><td>Korkeus ja paksuus</td><td>2</td></tr>
    <tr><td>Yhteensä</td><td></td><td>15</td></tr>
  </tbody>
</table>
</div>

Agentilla on riittävästi tietoa oikeasta elmästä ymmärtääkseen esimerkiksi, että pöydän kaikki neljä jalkaa ovat samanlaisia. Siksi mallin kaikkilla jaloilla on yhteiset parametrit. Mallin parametrien lisäksi jokaisella kuvalla on parametrit atsimuutille, korkeuskulmalle, kameran kierrolle optisen akselin ympäri, etäisyydelle, kuvan rajauksen vaakasuuntaiselle siirtymälle, kohdepisteen korkeudelle ja polttovälille. Ne määrittävät kameran sijainnin, suunnan ja projektion. Koko näkymässä oli yhteensä 36 parametria: 15 geometrialle ja 7 kullekin kolmesta kuvasta.

Pöydän kannen mitat annettiin kehotteessa ainoina esineestä mitattuina mittoina. Mallinnustehtävän kehote oli suomennettuna seuraava (alkuperäinen kehoite oli englanniksi):

> _Mallinna sohvapöytä -hakemistossa oleva sohvapöytä. Käytä "cad skill" prosessia. Pöydän kansi on täsmälleen 65 cm kumpaankin suuntaan. Tavoittele kaikille kuville 98 %:n IoU-arvoa. Älä mallinna pöydällä olevaa roinaa._

Agentti segmentoi pöydän siluetin jokaisesta kuvasta kuvamallin ja edellä kuvatun menetelmän avulla.

Optimointitehtävänä on maksimoida kuvista erotettujen siluettien ja projisoidun 3D-mallin vastaavien siluettien leikkauksen ja unionin suhde (intersection over union, IoU). Agentti optimoi 3D-mallin parametreja, kameroiden sijanteja ja suuntia sekä linssin projektioparametreja iteratiivisesti. Agentti voi vapaasti valita tilanteeseen parhaiten sopivan optimointimenetelmän.

Siluetteihin perustuva optimointi ei ole konveksi optimointiongelma. Siinä on paikallisia maksimeja, jotka eivät ole globaaleja maksimeja. Tämä mutkistaa työnkulkua, mutta agentti selviää näistä ongelmista helposti. Agentti vaihtaa optimointistrategiaa, hienosäätää alkuarvoja ja päivittää mallia työn edetessä tilanteen mukaan työstäessään ongelmaa kohti parasta ratkaisua.

IoU antaa hyvän tavoitteen agentille. Agenttia voi kehoittaa parantamaan 3D-mallia, kunnes se saavuttaa tietyn IoU-arvon. Tämä antaa agentille selkeän tavoitteen ja kannustaa sitä jatkamaan, kunnes tavoite on saavutettu.

Alla oleva interaktiivinen demo näyttää sohvapöydän mallinnuksen lopputuloksen. Voit pyörittää mallia ja tarkastella sitä eri suunnista. Kun napsautat jotakin kuvista, virtuaalinen kamera asettuu vastaamaan valokuvan näkymää. Säädä kuvan läpinäkyvyyttä tai piilota/tuo näkyville kuva nopeasti, niin näet mallin ja todellisen kuvan väliset erot.

<aside class="demo-placeholder">

demo tähän...

</aside>

Mallinnusprosessi on kuvattu agenteille tarkoitettuna "skillinä" täällä: <https://github.com/janne-alatalo/image-to-cad-skill>. Projekti sisältää visualisointiohjelmiston tulosten tarkasteluun. Sitä on testattu OpenAI:n malleilla, mutta se voisi toimia millä tahansa mallilla ja agenttiympäristöllä, josta on pääsy segmentointityönkulkuun kykenevään kuvamalliin. Codex antaa agenteille automaattisesti työkalut kehotteiden lähettämiseen OpenAI:n kuvamalleille, joten Codexin kanssa "skill" toimii suoraan. Tätä artikkelia kirjoitettaessa Anthropicilla ei ole omaa kuvamallia. Anthropicin malleja käytettäessä tarvitaan ylimääräistä säätämistä, jotta agentti voi käyttää jotain ulkoista kuvamallia.

## Huonekalujen järjestelysovellus mallinnuksen käyttökohteena

Kumppani ehdotti, että voisimme järjestää meidän huonekalut uusiksi. Oletettavasti minä olen se, joka lopulta raahaa niitä huonekaluja ympäriinsä, kunnes hän löytää mieleisensä järjestyksen. Aloin miettiä, miten voisin säästää vaivaa. Ajattelin "work smarter not harder" ja päätin tehdä hänelle sovelluksen, jonka avulla hän voi kokeilla eri järjestyksiä virtuaalisesti ennen kuin minun tarvitsee siirtää yhtäkään oikeaa huonekalua.

Mallinnusprosessi toimii erittäin hyvin huonekalujen mallinnukseen, koska huonekalut on yleensä helppo mallintaa muutamalla parametrilla: niissä on suoria reunoja, monilla osilla on yhteiset parametrit ja niin edelleen. Olen käyttänyt mallinnusprosessia meidän huonekaljen mallintamiseen. Kustakin huonekalusta tarvitaan vain yksi mitattu mitta, jotta kaikkien mallien mittakaava saadaan kohdalleen.

Huonekalujen lisäksi käytin kuvaa meidän asunnon pohjapiirroksesta asunnon 3D-mallinnukseen. Asunnon mallintaminen pohjapiirroksen perusteella on GPT-6 Astran kaltaiselle mallille helppo tehtävä.

Kun 3D-mallit olivat valmiit, tein nopeasti vibe-koodaamalla solvelluksen, jota kumppanini voi käyttää uuden järjestyksen suunnitteluun.

Tällä hetkellä sovelluksessa voi vain siirrellä huonekaluja, mutta kiinnostava jatkokehitys olisi lisätä mahdollisuus tuoda uusia huonekaluja kuvien perusteella. Käyttäjä voisi ladata muutaman kuvan uudesta huonekalusta, ja taustajärjestelmä käyttäisi Codexia Codex App Serverin [@openaiAppServer] kautta ajaakseen agenttia, jolla on pääsy tähän mallinnusprosessin "skilliin". Ajattelin, että tästä voisi olla hyötyä huonekaluostoksilla. Liikkeessä voi ottaa muutaman valokuvan ja nähdä suoraan, että miltä se näyttäisi kotona. Yksinkertaisen huonekalun mallintamiseen kuluu 10–20 minuuttia, mutta sen vielä jaksaa odottaa huonekaluliikkeessä.

Kaiken kaikkiaan projekti onnistui hyvin. On mukava löytää näille uusille tekoälymalleille uusia käyttötapoja. Vielä muutama vuosi sitten tällaiset asiat olisivat olleet mahdollisia vain scifileffoissa.
