EP15 - critérios de correção

EP15 - critérios de correção

por João Pedro Turri -
Número de respostas: 1

Olá, 

Gostaria de saber se no contexto desse EP existe um único output considerado correto, pois percebi que o meu SeamCarver produz uma imagem ligeiramente diferente da que está como exemplo no PACA:

(No canto direito, por exemplo, o meu programa cortou a imagem rente à quarta pessoa, enquanto que o exemplo preservou um pouco de espaço)

Analisando o output do meu ShowSeams, percebi que o seam encontrado é bastante próximo ao que foi colocado de exemplo, mas em alguns pontos da imagem (principalmente áreas de baixa energia, céu/mar/etc.) ocorrem pequenas flutuações em relação ao exemplo.

Imagino que isso ocorra por conta do jeito que o meu programa está utilizando variáveis do tipo double. Contudo, considerando que o resultado final está bastante próximo do exemplo, posso considerar que o programa está correto? Ou eu deveria me esforçar para obter uma imagem que seja pixel a pixel idêntica ao exemplo?

Em resposta à João Pedro Turri

Re: EP15 - critérios de correção

por José Coelho de Pina -

Olá João,

Desculpem pela demora.

Gostaria de saber se no contexto desse EP existe um único output considerado correto

Legal!
Dependendo do digrafo e dos comprimentos dos seus arcos há mais que um caminho mínimo.
Por causa da falta de unicidade é que  frequentemente usamos o artigo indefinido, apesar de ser meio pedante:
uma floresta DFS, um caminho mínimo, uma ordenação topológica, uma bipartição de um grafo,...

pois percebi que o meu SeamCarver produz uma imagem ligeiramente

Excelente!
Nesse caso devemos fazer testes pequenos para os quais visualmente podemos ver a solução.
O pessoal de COS226 diponibilizou vários arquivos para testes:

    % ls *.png
    10x10.png         10x12.png              12x10.png      1x1.png
    1x8.png           3x4.png                3x7.png        4x6.png
    5x6.png           6x5.png                7x10.png       7x3.png
    8x1.png           chameleon.png          diagonals.png  HJocean.png
    HJoceanSmall.png  HJoceanTransposed.png  stripes.png

    % ls *.txt
    10x10.printseams.txt    10x12.printseams.txt      12x10.printseams.txt
    3x4.printseams.txt      3x7.printseams.txt        4x6.printseams.txt
    5x6.printseams.txt      6x5.printseams.txt        7x10.printseams.txt
    7x3.printseams.txt      diagonals.printseams.txt  readme.txt
    stripes.printseams.txt

mas em alguns pontos da imagem (principalmente áreas de baixa energia, céu/mar/etc.) ocorrem pequenas flutuações em relação ao exemplo.

Hmm.
Talvez você ja tenha feito isso, mas eu testaria o programa com os testes disponibilisados pelo pessoal de COS226.
Devemos nos preocupar se o cálcula da energia está correto e se nosso programa encontra um caminho mínimo.
Podemos ter vários caminhos mínimos, mas o comprimento do caminho mínimo é único para cada matriz de energia.

deveria me esforçar para obter uma imagem que seja pixel a pixel idêntica ao exemplo?

Devemos apenas procurar fazer os cálculos da energia corretamente e encontrar um caminho mínimo.

Exemplos

Notem que para diagonals.png há vários caminhos mínimos.

    % java PrintSeams ../seamCarving/1x8.png 
    ../seamCarving/1x8.png (1-by-8 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 0 0 0 0 0 0 0 0 }
      13.67* 
      13.60* 
       9.11* 
       6.48* 
       5.83* 
       9.64* 
      17.83* 
      10.49* 
    Total energy = 86.662685


    Horizontal seam: { 4 }
      13.67  
      13.60  
       9.11  
       6.48  
       5.83* 
       9.64  
      17.83  
      10.49  
    Total energy = 5.830952

    % java PrintSeams 3x7.png 
    ../seamCarving/3x7.png (3-by-7 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 1 2 2 2 1 2 2 }
     212.11   174.62*  175.13  
     283.29   294.32   173.45* 
     354.33   236.17   199.07* 
     194.42   325.15   166.88* 
     232.09   251.36*  309.88  
     320.38   279.64   241.34* 
     185.98   237.05   214.15* 
    Total energy = 1420.871702


    Horizontal seam: { 0 0 1 }
     212.11*  174.62*  175.13  
     283.29   294.32   173.45* 
     354.33   236.17   199.07  
     194.42   325.15   166.88  
     232.09   251.36   309.88  
     320.38   279.64   241.34  
     185.98   237.05   214.15  
    Total energy = 560.178311


    % more ../seamCarving/3x7.printseams.txt 
    3x7.png (3-by-7 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 1 2 2 2 1 2 2 }
     212.11   174.62*  175.13  
     283.29   294.32   173.45* 
     354.33   236.17   199.07* 
     194.42   325.15   166.88* 
     232.09   251.36*  309.88  
     320.38   279.64   241.34* 
     185.98   237.05   214.15* 
    Total energy = 1420.871702


    Horizontal seam: { 0 0 1 }
     212.11*  174.62*  175.13  
     283.29   294.32   173.45* 
     354.33   236.17   199.07  
     194.42   325.15   166.88  
     232.09   251.36   309.88  
     320.38   279.64   241.34  
     185.98   237.05   214.15  
    Total energy = 560.178311

    % java PrintSeams diagonals.png 
    ../seamCarving/diagonals.png (9-by-12 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 0 1 0 1 0 1 0 1 0 1 0 0 }
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62*  624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62*  624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62*  624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62*  624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62*  624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
    Total energy = 6397.757042


    Horizontal seam: { 4 3 3 3 3 3 3 2 1 }
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67* 
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62*  624.62  
     624.62   624.62*  624.62*  624.62*  624.62*  624.62*  624.62*  624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
    Total energy = 5255.685103


    % more ../seamCarving/diagonals.printseams.txt 
    diagonals.png (9-by-12 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 0 0 0 0 0 0 0 0 0 0 0 0 }
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62*  624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
    Total energy = 6397.757042


    Horizontal seam: { 0 0 0 0 0 0 0 0 1 }
     441.67*  624.62*  624.62*  624.62*  624.62*  624.62*  624.62*  624.62*  624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67* 
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
     441.67   624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62  
     624.62   624.62   624.62   624.62   624.62   624.62   624.62   624.62   441.67  
    Total energy = 5255.685103

    % java PrintSeams 7x3.png 
    ../seamCarving/7x3.png (7-by-3 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 4 4 5 }
     222.73   245.24   195.44   248.92   159.43*  238.59   215.45  
     385.96   237.12   268.77   218.95   265.27*  292.37   220.30  
     214.95   319.16   244.78   234.13   307.13   161.68*  301.30  
    Total energy = 586.385509


    Horizontal seam: { 2 1 0 1 0 0 0 }
     222.73   245.24   195.44*  248.92   159.43*  238.59*  215.45* 
     385.96   237.12*  268.77   218.95*  265.27   292.37   220.30  
     214.95*  319.16   244.78   234.13   307.13   161.68   301.30  
    Total energy = 1479.942484


    % more 7x3.printseams.txt 
    7x3.png (7-by-3 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 4 4 5 }
     222.73   245.24   195.44   248.92   159.43*  238.59   215.45  
     385.96   237.12   268.77   218.95   265.27*  292.37   220.30  
     214.95   319.16   244.78   234.13   307.13   161.68*  301.30  
    Total energy = 586.385509


    Horizontal seam: { 2 1 0 1 0 0 0 }
     222.73   245.24   195.44*  248.92   159.43*  238.59*  215.45* 
     385.96   237.12*  268.77   218.95*  265.27   292.37   220.30  
     214.95*  319.16   244.78   234.13   307.13   161.68   301.30  
    Total energy = 1479.942484

    % java PrintSeams 10x10.png 
    ../seamCarving/10x10.png (10-by-10 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 8 7 7 7 7 8 9 8 7 7 }
     335.29   197.20   231.08   194.09   222.00   226.00   244.63   260.37   169.43*  254.98  
     275.95   136.73   272.84   254.64   280.20   178.56   236.84   128.93*  172.62   248.20  
     183.01   222.06   156.22   186.79   208.01   171.06   295.56   125.46*  259.00   231.78  
     248.53   228.47   252.25   168.24   164.97   127.18   209.46   202.49*  229.03   232.27  
     260.02   293.85   274.51   217.81   165.63   175.67   223.37   194.78*  243.35   217.28  
     117.69   208.68   294.31   243.53   161.69   253.29   236.73   217.57   221.35*  197.18  
     335.71   318.51   222.38   240.88   239.79   220.45   259.36   269.76   264.14   200.68* 
     271.41   225.20   270.73   187.06   197.58   165.59   255.09   276.89   124.04*  298.57  
     259.57   222.50   204.43   252.65   270.87   199.05   324.13    90.64*  245.94   248.36  
     272.10   324.87   216.40   218.43   177.66   174.61   178.31   125.05*  228.36   240.44  
    Total energy = 1582.861250


    Horizontal seam: { 2 1 2 3 3 3 3 2 1 2 }
     335.29   197.20   231.08   194.09   222.00   226.00   244.63   260.37   169.43   254.98  
     275.95   136.73*  272.84   254.64   280.20   178.56   236.84   128.93   172.62*  248.20  
     183.01*  222.06   156.22*  186.79   208.01   171.06   295.56   125.46*  259.00   231.78* 
     248.53   228.47   252.25   168.24*  164.97*  127.18*  209.46*  202.49   229.03   232.27  
     260.02   293.85   274.51   217.81   165.63   175.67   223.37   194.78   243.35   217.28  
     117.69   208.68   294.31   243.53   161.69   253.29   236.73   217.57   221.35   197.18  
     335.71   318.51   222.38   240.88   239.79   220.45   259.36   269.76   264.14   200.68  
     271.41   225.20   270.73   187.06   197.58   165.59   255.09   276.89   124.04   298.57  
     259.57   222.50   204.43   252.65   270.87   199.05   324.13    90.64   245.94   248.36  
     272.10   324.87   216.40   218.43   177.66   174.61   178.31   125.05   228.36   240.44  
    Total energy = 1675.680600


    % more 10x10.printseams.txt 
    10x10.png (10-by-10 image)

    The table gives the dual-gradient energies of each pixel.
    The asterisks denote a minimum energy vertical or horizontal seam.

    Vertical seam: { 8 7 7 7 7 8 9 8 7 7 }
     335.29   197.20   231.08   194.09   222.00   226.00   244.63   260.37   169.43*  254.98  
     275.95   136.73   272.84   254.64   280.20   178.56   236.84   128.93*  172.62   248.20  
     183.01   222.06   156.22   186.79   208.01   171.06   295.56   125.46*  259.00   231.78  
     248.53   228.47   252.25   168.24   164.97   127.18   209.46   202.49*  229.03   232.27  
     260.02   293.85   274.51   217.81   165.63   175.67   223.37   194.78*  243.35   217.28  
     117.69   208.68   294.31   243.53   161.69   253.29   236.73   217.57   221.35*  197.18  
     335.71   318.51   222.38   240.88   239.79   220.45   259.36   269.76   264.14   200.68* 
     271.41   225.20   270.73   187.06   197.58   165.59   255.09   276.89   124.04*  298.57  
     259.57   222.50   204.43   252.65   270.87   199.05   324.13    90.64*  245.94   248.36  
     272.10   324.87   216.40   218.43   177.66   174.61   178.31   125.05*  228.36   240.44  
    Total energy = 1582.861250


    Horizontal seam: { 2 1 2 3 3 3 3 2 1 2 }
     335.29   197.20   231.08   194.09   222.00   226.00   244.63   260.37   169.43   254.98  
     275.95   136.73*  272.84   254.64   280.20   178.56   236.84   128.93   172.62*  248.20  
     183.01*  222.06   156.22*  186.79   208.01   171.06   295.56   125.46*  259.00   231.78* 
     248.53   228.47   252.25   168.24*  164.97*  127.18*  209.46*  202.49   229.03   232.27  
     260.02   293.85   274.51   217.81   165.63   175.67   223.37   194.78   243.35   217.28  
     117.69   208.68   294.31   243.53   161.69   253.29   236.73   217.57   221.35   197.18  
     335.71   318.51   222.38   240.88   239.79   220.45   259.36   269.76   264.14   200.68  
     271.41   225.20   270.73   187.06   197.58   165.59   255.09   276.89   124.04   298.57  
     259.57   222.50   204.43   252.65   270.87   199.05   324.13    90.64   245.94   248.36  
     272.10   324.87   216.40   218.43   177.66   174.61   178.31   125.05   228.36   240.44  
    Total energy = 1675.680600