mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-01 22:17:29 +08:00

* Prepared skeleton and basic component implementations for the jbig2 encoding. * Added Bitset. Implemented Bitmap. * Decoder with old Arithmetic Decoder * Partly working arithmetic * Working arithmetic decoder. * MMR patched. * rebuild to apache. * Working generic * Working generic * Decoded full document * Update Jenkinsfile go version [master] (#398) * Update Jenkinsfile go version * Decoded AnnexH document * Minor issues fixed. * Update README.md * Fixed generic region errors. Added benchmark. Added bitmap unpadder. Added Bitmap toImage method. * Fixed endofpage error * Added integration test. * Decoded all test files without errors. Implemented JBIG2Global. * Merged with v3 version * Fixed the EOF in the globals issue * Fixed the JBIG2 ChocolateData Decode * JBIG2 Added license information * Minor fix in jbig2 encoding. * Applied the logging convention * Cleaned unnecessary imports * Go modules clear unused imports * checked out the README.md * Moved trace to Debug. Fixed the build integrate tag in the document_decode_test.go * Initial encoder skeleton * Applied UniPDF Developer Guide. Fixed lint issues. * Cleared documentation, fixed style issues. * Added jbig2 doc.go files. Applied unipdf guide style. * Minor code style changes. * Minor naming and style issues fixes. * Minor naming changes. Style issues fixed. * Review r11 fixes. * Added JBIG2 Encoder skeleton. * Moved Document and Page to jbig2/document package. Created decoder package responsible for decoding jbig2 stream. * Implemented raster functions. * Added raster uni low test funcitons. * Added raster low test functions * untracked files on jbig2-encoder: c869089 Added raster low test functions * index on jbig2-encoder: c869089 Added raster low test functions * Added morph files. * implemented jbig2 encoder basics * JBIG2 Encoder - Generic method * Added jbig2 image encode ttests, black/white image tests * cleaned and tested jbig2 package * unfinished jbig2 classified encoder * jbig2 minor style changes * minor jbig2 encoder changes * prepared JBIG2 Encoder * Style and lint fixes * Minor changes and lints * Fixed shift unsinged value build errors * Minor naming change * Added jbig2 encode, image gondels. Fixed jbig2 decode bug. * Provided jbig2 core.DecodeGlobals function. * Fixed JBIG2Encoder `r6` revision issues. * Removed public JBIG2Encoder document. * Minor style changes * added NewJBIG2Encoder function. * fixed JBIG2Encoder 'r9' revision issues. * Cleared 'r9' commented code. * Updated ACKNOWLEDGEMENETS. Fixed JBIG2Encoder 'r10' revision issues. Co-authored-by: Gunnsteinn Hall <gunnsteinn.hall@gmail.com>
97 lines
2.7 KiB
Go
97 lines
2.7 KiB
Go
/*
|
|
* This file is subject to the terms and conditions defined in
|
|
* file 'LICENSE.md', which is part of this source code package.
|
|
*/
|
|
|
|
package classer
|
|
|
|
import (
|
|
"github.com/unidoc/unipdf/v3/internal/jbig2/bitmap"
|
|
"github.com/unidoc/unipdf/v3/internal/jbig2/errors"
|
|
)
|
|
|
|
// Settings keeps the settings for the classer.
|
|
type Settings struct {
|
|
// MaxCompWidth is max component width allowed.
|
|
MaxCompWidth int
|
|
// MaxCompHeight is max component height allowed.
|
|
MaxCompHeight int
|
|
// SizeHaus is the size of square struct elem for hausdorf method.
|
|
SizeHaus int
|
|
// Rank val of hausdorf method match.
|
|
RankHaus float64
|
|
// Thresh is the threshold value for the correlation score.
|
|
Thresh float64
|
|
// Corrects thresh value for heavier components; 0 for no correction.
|
|
WeightFactor float64
|
|
// KeepClassInstances is a flag that defines if the class instances should be stored
|
|
// in the 'ClassInstances' BitmapsArray.
|
|
KeepClassInstances bool
|
|
// Components is the setting the classification.
|
|
Components bitmap.Component
|
|
// Method is the encoding method.
|
|
Method Method
|
|
}
|
|
|
|
// DefaultSettings returns default settings struct.
|
|
func DefaultSettings() Settings {
|
|
s := &Settings{}
|
|
s.SetDefault()
|
|
return *s
|
|
}
|
|
|
|
// SetDefault sets the default value for the settings.
|
|
func (s *Settings) SetDefault() {
|
|
// if max width is not defined get the value from the constants.
|
|
if s.MaxCompWidth == 0 {
|
|
switch s.Components {
|
|
case bitmap.ComponentConn:
|
|
s.MaxCompWidth = MaxConnCompWidth
|
|
case bitmap.ComponentCharacters:
|
|
s.MaxCompWidth = MaxCharCompWidth
|
|
case bitmap.ComponentWords:
|
|
s.MaxCompWidth = MaxWordCompWidth
|
|
}
|
|
}
|
|
// if max height is not defined take the 'MaxCompHeight' value.
|
|
if s.MaxCompHeight == 0 {
|
|
s.MaxCompHeight = MaxCompHeight
|
|
}
|
|
|
|
if s.Thresh == 0.0 {
|
|
s.Thresh = 0.9
|
|
}
|
|
if s.WeightFactor == 0.0 {
|
|
s.WeightFactor = 0.75
|
|
}
|
|
if s.RankHaus == 0.0 {
|
|
s.RankHaus = 0.97
|
|
}
|
|
if s.SizeHaus == 0 {
|
|
s.SizeHaus = 2
|
|
}
|
|
}
|
|
|
|
// Validate validates the settings input.
|
|
func (s Settings) Validate() error {
|
|
const processName = "Settings.Validate"
|
|
if s.Thresh < 0.4 || s.Thresh > 0.98 {
|
|
return errors.Error(processName, "jbig2 encoder thresh not in range [0.4 - 0.98]")
|
|
}
|
|
if s.WeightFactor < 0.0 || s.WeightFactor > 1.0 {
|
|
return errors.Error(processName, "jbig2 encoder weight factor not in range [0.0 - 1.0]")
|
|
}
|
|
if s.RankHaus < 0.5 || s.RankHaus > 1.0 {
|
|
return errors.Error(processName, "jbig2 encoder rank haus value not in range [0.5 - 1.0]")
|
|
}
|
|
if s.SizeHaus < 1 || s.SizeHaus > 10 {
|
|
return errors.Error(processName, "jbig2 encoder size haus value not in range [1 - 10]")
|
|
}
|
|
switch s.Components {
|
|
case bitmap.ComponentConn, bitmap.ComponentCharacters, bitmap.ComponentWords:
|
|
default:
|
|
return errors.Error(processName, "invalid classer component")
|
|
}
|
|
return nil
|
|
}
|