Показать сообщение отдельно

  #4  
Старый 21.03.2010, 17:48
draliokero
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме:
385811

Репутация: 12
По умолчанию

Gifts, сразу в поиск полез, как думаете этим вопрос решится http://bubble.ro/How_to_check_if_an_image_is_grayscale_in_PHP.html ?


На Google Code нашел С++ проект с фильтром скелетонизации (алгоритм Zhang Suen PDF на Google Docs (Редирект с tinyurl.com, потому что парсер режет [forbidden link])) переписал, получилось вот это:
PHP код:
<?php
$im 
imagecreatefrompng("php.png");
$width imagesx($im);
$height imagesy($im);
for (
$y 0$y $height$y++) {
    for (
$x 0$x $width$x++) {
        if (
imagecolorat($im$x $y) <= 0x7FFFFFimagesetpixel($im$x$y0x000000);
        else 
imagesetpixel($im$x$y0xFFFFFF);
    } 

// Функция скелетонизации бинарного изображения
function zhang_suen_thinning_iteration($im$condition_switch)
{
    global 
$width$height;

    
$running false;
    for(
$y 1$y $height 1$y++) {
        for(
$x 1$x $width 1$x++) {
            
$p1 imagecolorat($im$x$y) > 0;
            if (
$p1 0) {
                
$p2 imagecolorat($im$x$y 1) > 0;
                
$p3 imagecolorat($im$x 1$y 1) > 0;
                
$p4 imagecolorat($im$x 1$y) > 0;
                
$p5 imagecolorat($im$x 1$y 1) > 0;
                
$p6 imagecolorat($im$x$y 1) > 0;
                
$p7 imagecolorat($im$x 1$y 1) > 0;
                
$p8 imagecolorat($im$x 1$y) > 0;
                
$p9 imagecolorat($im$x 1$y 1) > 0;
                
$connectivity =
                (
$p2 == && $p3 == 0) +
                (
$p3 == && $p4 == 0) +
                (
$p4 == && $p5 == 0) +
                (
$p5 == && $p6 == 0) +
                (
$p6 == && $p7 == 0) +
                (
$p7 == && $p8 == 0) +
                (
$p8 == && $p9 == 0) +
                (
$p9 == && $p2 == 0);
                
$non_zero_neighbors $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9;

                if (
<= $non_zero_neighbors && $non_zero_neighbors <= && $connectivity == 1) {
                    if (
$condition_switch == true) {
                        if ((
$p2 $p4 $p6 == 0) && ($p4 $p6 $p8 == 0)) {
                            
imagesetpixel($im$x$y0x000000);
                            
$running true;
                        } 
                    } else {
                        if ((
$p2 $p4 $p8 == 0) && ($p2 $p6 $p8 == 0)) {
                            
imagesetpixel($im$x$y0x000000);
                            
$running true;
                        } 
                    } 
                } 
            } 
        } 
    } 
    return 
$running;


zhang_suen_thinning_iteration($imtrue);

header('Content-type: image/png');
imagepng($im);
Но работает как-то криво, с точностью на оборот – происходит не скелетонизации, а ожирение o_O

Есть на Java, Perl, C++, Pas куски из OCR модулей,
вот один из них: ZhangSuen.java
Вроде все понятно, может кто-нибудь поможет тогда исправить ошибку и доделать?

Последний раз редактировалось draliokero; 23.03.2010 в 01:21..
 
Ответить с цитированием