erode di
parent
803dd10d2e
commit
3fc1de7ea5
|
@ -1 +1 @@
|
||||||
Subproject commit b2b584be519b64b59e6a661322b762d7747b5f96
|
Subproject commit bdca63488a06bb6ff88713cce497bec7874ee12f
|
|
@ -312,42 +312,63 @@ void setup_operations(gp_program* program)
|
||||||
return ret;
|
return ret;
|
||||||
}, "passthrough");
|
}, "passthrough");
|
||||||
|
|
||||||
// static operation_t op_erode([](const image_t a, float erosion_size) {
|
static operation_t op_erode([program](const image_t a) {
|
||||||
// image_t ret{};
|
constexpr auto limit = static_cast<float>(std::numeric_limits<blt::u32>::max());
|
||||||
// erosion_size = std::min(std::max(erosion_size, 0.0f), 21.0f);
|
const auto erosion_size = program->get_random().get_i32(3, 12);
|
||||||
// const cv::Mat src{IMAGE_DIMENSIONS, IMAGE_DIMENSIONS, CV_32F, a.as_void_const()};
|
std::vector<float> converted_data(IMAGE_SIZE);
|
||||||
// cv::Mat dst{IMAGE_DIMENSIONS, IMAGE_DIMENSIONS, CV_32F, ret.get_data().data.data()};
|
std::vector<float> output_data(IMAGE_SIZE);
|
||||||
// const cv::Mat element = cv::getStructuringElement( cv::MORPH_CROSS,
|
|
||||||
// cv::Size( static_cast<int>(2*erosion_size + 1), static_cast<int>(2*erosion_size+1) ),
|
for (const auto& [o, v] : blt::in_pairs(converted_data, a.get_data().data))
|
||||||
// cv::Point( static_cast<int>(erosion_size), static_cast<int>(erosion_size) ) );
|
o = static_cast<float>(v) / limit;
|
||||||
// cv::erode( src, dst, element );
|
|
||||||
// return ret;
|
const cv::Mat src{IMAGE_DIMENSIONS, IMAGE_DIMENSIONS, CV_32F, converted_data.data()};
|
||||||
// }, "erode_image");
|
cv::Mat dst{IMAGE_DIMENSIONS, IMAGE_DIMENSIONS, CV_32F, output_data.data()};
|
||||||
//
|
|
||||||
// static operation_t op_dilate([](const image_t a, float dilate_size) {
|
const cv::Mat element = cv::getStructuringElement( cv::MORPH_ERODE,
|
||||||
// image_t ret{};
|
cv::Size( erosion_size, erosion_size ));
|
||||||
// dilate_size = std::min(std::max(dilate_size, 0.0f), 21.0f);
|
cv::erode( src, dst, element );
|
||||||
// const cv::Mat src{IMAGE_DIMENSIONS, IMAGE_DIMENSIONS, CV_32F, a.as_void_const()};
|
|
||||||
// cv::Mat dst{IMAGE_DIMENSIONS, IMAGE_DIMENSIONS, CV_32F, ret.get_data().data.data()};
|
image_t ret{};
|
||||||
// const cv::Mat element = cv::getStructuringElement( cv::MORPH_CROSS,
|
for (const auto& [o, v] : blt::in_pairs(ret.get_data().data, output_data))
|
||||||
// cv::Size( static_cast<int>(2*dilate_size + 1), static_cast<int>(2*dilate_size+1) ),
|
o = static_cast<blt::u32>(v * limit);
|
||||||
// cv::Point( static_cast<int>(dilate_size), static_cast<int>(dilate_size) ) );
|
|
||||||
// cv::dilate( src, dst, element );
|
return ret;
|
||||||
// return ret;
|
}, "erode_image");
|
||||||
// }, "erode_image");
|
|
||||||
|
static operation_t op_dilate([program](const image_t a) {
|
||||||
|
constexpr auto limit = static_cast<float>(std::numeric_limits<blt::u32>::max());
|
||||||
|
const auto dilate_size = program->get_random().get_i32(3, 12);
|
||||||
|
std::vector<float> converted_data(IMAGE_SIZE);
|
||||||
|
std::vector<float> output_data(IMAGE_SIZE);
|
||||||
|
for (const auto& [o, v] : blt::in_pairs(converted_data, a.get_data().data))
|
||||||
|
o = static_cast<float>(v) / limit;
|
||||||
|
|
||||||
|
const cv::Mat src{IMAGE_DIMENSIONS, IMAGE_DIMENSIONS, CV_32F, converted_data.data()};
|
||||||
|
cv::Mat dst{IMAGE_DIMENSIONS, IMAGE_DIMENSIONS, CV_32F, output_data.data()};
|
||||||
|
|
||||||
|
const cv::Mat element = cv::getStructuringElement( cv::MORPH_DILATE,
|
||||||
|
cv::Size( dilate_size, dilate_size ));
|
||||||
|
cv::dilate( src, dst, element );
|
||||||
|
|
||||||
|
image_t ret{};
|
||||||
|
for (const auto& [o, v] : blt::in_pairs(ret.get_data().data, output_data))
|
||||||
|
o = static_cast<blt::u32>(v * limit);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}, "dilate_image");
|
||||||
|
|
||||||
operator_builder builder{};
|
operator_builder builder{};
|
||||||
builder.build(op_image_ephemeral, make_add<image_t>(), make_sub<image_t>(), make_mul<image_t>(), make_div<image_t>(), op_image_x, op_image_y,
|
builder.build(op_image_ephemeral, make_add<image_t>(), make_sub<image_t>(), make_mul<image_t>(), make_div<image_t>(), op_image_x, op_image_y,
|
||||||
op_image_sin, op_image_gt, op_image_lt, op_image_cos, op_image_log, op_image_exp, op_image_or, op_image_and, op_image_xor,
|
op_image_sin, op_image_gt, op_image_lt, op_image_cos, op_image_log, op_image_exp, op_image_or, op_image_and, op_image_xor,
|
||||||
op_image_cos_off, op_image_sin_off, op_image_perlin, op_image_noise, op_image_random, op_image_2d_perlin_eph, op_image_not,
|
op_image_cos_off, op_image_sin_off, op_image_perlin, op_image_noise, op_image_random, op_image_2d_perlin_eph, op_image_not,
|
||||||
op_image_grad, op_image_2d_perlin_oct);
|
op_image_grad, op_image_2d_perlin_oct, op_erode, op_dilate);
|
||||||
// builder.build(op_image_grad, op_image_x, op_image_y);
|
// builder.build(op_erode, op_image_2d_perlin_oct);
|
||||||
program->set_operations(builder.grab());
|
program->set_operations(builder.grab());
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_gp_system(const blt::size_t population_size)
|
void setup_gp_system(const blt::size_t population_size)
|
||||||
{
|
{
|
||||||
reference_image = image_storage_t::from_file("../silly.png");
|
reference_image = image_storage_t::from_file("../backend.png");
|
||||||
|
|
||||||
config.set_pop_size(population_size);
|
config.set_pop_size(population_size);
|
||||||
config.set_elite_count(2);
|
config.set_elite_count(2);
|
||||||
|
|
Loading…
Reference in New Issue