Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Project: Voxel model upsampling #11

Closed
3 of 6 tasks
dkurt opened this issue Feb 1, 2024 · 3 comments
Closed
3 of 6 tasks

Project: Voxel model upsampling #11

dkurt opened this issue Feb 1, 2024 · 3 comments

Comments

@dkurt
Copy link
Owner

dkurt commented Feb 1, 2024

Voxel model upsampling

  • Выполнена подготовка проекта
  • Написан алгоритм на Halide и запущен на x86 (Voxels upscale #23)
  • Алгоритм запущен на RISC-V без регрессии, сгенерирован скалярный код (PR)
  • Алгоритм векторизован под RISC-V без регрессии, сгенерирован векторизованный код (PR)
  • (опционально) Получилось применить автопланировщик, сравнить с собственной векторизацией
  • Подготовить 1-2 слайда о своей работе

Реализовать метод увеличения разрешения для трехмерной voxel модели, используя метод обратной свертки.

reference code: https://gist.github.com/dkurt/d9dfa96c0f4e9a09d8018351a9f08ef4

Скрипт для визуализации
import matplotlib.pyplot as plt
import numpy as np
import cv2 as cv

slices = []
for i in range(1, 73):
    slices.append(cv.imread(f"test/image{i:04}.png", cv.IMREAD_UNCHANGED))
    slices[-1] = cv.rotate(slices[-1], cv.ROTATE_90_CLOCKWISE)
    slices[-1][...,3] = slices[-1][...,3] > 0

img = np.stack(slices, axis=2)

x, y, z = np.indices((img.shape[0] + 1, img.shape[1] + 1, img.shape[2] + 1))
is_visible = img[...,3]

img = img.astype(np.float32) / 255
colors = img[..., [2, 1, 0]]

ax = plt.figure().add_subplot(projection='3d')
ax.voxels(x, y, z, is_visible,
          facecolors=colors,
          edgecolors=np.clip(2*colors - 0.5, 0, 1),  # brighter
          linewidth=0.5)
ax.set(xlabel='x', ylabel='y', zlabel='z')
ax.set_aspect('equal')

plt.savefig("img.png")

Воксельная модель по слоям (в виде .png изображений): test.zip

@dkurt
Copy link
Owner Author

dkurt commented Feb 6, 2024

cv::Mat voxels({num_images, 4, rows, cols}, CV_8U);
for (int i = 0; i < num_images; ++i) {
    cv::Mat img = cv::imread("image_i.png", cv::IMREAD_UNCHANGED);
    std::vector<cv::Mat> colors(4);
    for (int j = 0; j < 4; ++j) {
        colors[j] = cv::Mat(std::vector<int>{rows, cols}, CV_8U, voxels.ptr<uchar>(i, j));
    }
    cv::split(img, colors);
}

@SirTruber
Copy link

image
При make для x86 почему-то подцепляется библиотека линейной алгебры Eigen, там немного другие функции. rv64 собирается. Как поправить?

@dkurt
Copy link
Owner Author

dkurt commented Feb 7, 2024

try add -DWITH_EIGEN=OFF to https://github.com/dkurt/halide_riscv/blob/main/CMakeLists.txt (OpenCV part with ExternalProject_Add)

@dkurt dkurt closed this as completed Feb 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants