Внедрение JBIG-KIT через MATLAB

Я пытаюсь реализовать сжатие JBIG для некоторых изображений. Я просто хочу знать степень сжатия, достигнутую алгоритмом. Для этого я использую JBIG-KIT Маркуса К.

https://www.cl.cam.ac.uk/~mgk25/jbigkit/ Кроме того, доступна реализация MATLAB, в которой я использую код, вставленный ниже: Не могли бы вы задать мне вопросы относительно следующего кода MATLAB? Это код из панели инструментов вейвлета с путями и командами, добавленными для исполняемых файлов JBIG-KIT.

function [y,nbr_bits] = perform_jbig_coding(x)
% perform_jbig_coding - perform binary image coding
%  [y,nbr_bits] = perform_jbig_coding(x);
%  It requires pbmtojbg and jbgtopbm executable.
%  Copyright (c) 2006 Gabriel Peyr
name_pbm = 'b.pbm';
name_jbg = 'c.jbg';
if size(x,1)>1 && size(x,2)>1
% forward transform
% save as pbm
imwrite(rescale(x), name_pbm, 'pbm');
% convert to jgib
!/Users/sahilsharma/Documents/MATLAB/JBIG/pbmtojbg -q b.pbm c.jbg
% read jbig file
fid = fopen(name_jbg); %Here%
if fid<0
    error('Unable to open Jbig file.');
end
[y,cnt] = fread(fid, Inf);
fclose(fid);
nbr_bits = length(y)*8;
% remove tmp files
!del c.jbg
!del b.pbm
else
% backward transform
fid = fopen(name_jbg, 'wb');
if fid<0
    error('Unable to open Jbig file.');
end
fwrite(fid, x);
fclose(fid);
% convert to pbm
!/Users/sahilsharma/Documents/MATLAB/JBIG/jbgtopbm c.jbg b.pbm
% read pbm
y = imread(name_pbm);
% remove tmp files
!del c.jbg
!del b.pbm
nbr_bits = -1;
end

Я добавил здесь путь для запуска моего кода. Сейчас это работает. Однако у меня есть два сомнения,

  1. Команда !del не работает, MATLAB сообщает, что «Команда не найдена: del». Так что я подумал, что "rm" может работать здесь. Однако это тоже не работает, если у вас есть идеи, как я смогу удалить эти файлы, пожалуйста, ответьте.
  1. [y,cnt] = fread(fid, Inf); (я прокомментировал %Here% в коде), я получаю здесь закодированные значения? Потому что мне нужно найти степень сжатия, достигнутую JBIG. JBIG использует арифметическое кодирование на основе контекста. Поэтому я хотел знать, читает ли [y,cnt] закодированные данные. Благодаря этому я смогу напрямую получить CR, поскольку знаю исходный размер.

«x» — это двоичное изображение, в настоящее время я использую изображение размером 740x628 (размер (x) = [740 628]). cnt = 115392 и y= 14424x1 двойное число. Я хотел получить подтверждение о «y», если это закодированное изображение. Если это так, то мой коэффициент сжатия становится (740 * 628)/115392. Операционная система, которую я использую, — macOS.

О, очень жаль, что 115392 — это значение «nbr_bits», а «cnt» = 14424.

Если вы ожидаете получить здесь какую-либо помощь, вам нужно показать свой код и точно указать, что вы сделали с теми входными данными, что произошло и что вы ожидали вместо этого. На ваш смутно изложенный вопрос в его нынешнем виде ответить невозможно.

Mark Adler 10.02.2023 02:20

Да, на самом деле предыдущий вопрос, который я разместил, был расплывчатым, потому что я сам не понимал, как его задать. Это новая реализация, которую я пытаюсь решить с той же проблемой, пожалуйста, прокомментируйте, если проблема все еще кажется неясной.

Sahil Sharma 10.02.2023 18:14

Команда del не имеет ничего общего ни с JBIG, ни с MATLAB. Вам нужно сказать, под какой операционной системой вы все это делаете. ! MATLAB просто отправляет следующее в вашу операционную систему как есть, поэтому все, что вы наберете в командной строке вашей операционной системы, должно работать точно так же после ! в MATLAB.

Mark Adler 10.02.2023 22:33

Вы приближаетесь к ответу на вопрос, но вы еще не там. Какую cnt ценность вы получаете и чего ожидали? Каковы размеры изображения x, которое вы сжимаете?

Mark Adler 10.02.2023 22:43

«x» — это двоичное изображение, в настоящее время я использую изображение размером 740x628 (размер (x) = [740 628]). cnt = 115392 и y= 14424x1 двойное число. Я хотел получить подтверждение о «y», если это закодированное изображение. Если это так, то мой коэффициент сжатия становится (740 * 628)/115392. Операционная система, которую я использую, — macOS.

Sahil Sharma 10.02.2023 23:16

Это идет в вопросе, а не в комментарии.

Mark Adler 11.02.2023 04:45

Каков размер файла b.pbm?

Mark Adler 11.02.2023 05:49

b.pbm показывает эквивалент 740 * 628 бит.

Sahil Sharma 11.02.2023 06:45

Нет. Когда вы перечисляете свои файлы, каков размер этого файла в байтах?

Mark Adler 11.02.2023 06:53

Удивительно, но это те же 58кб, а в списке файлов c.jbg имеет тот же размер, что и 14кб, что примерно соответствует 115392/8.

Sahil Sharma 11.02.2023 08:19

Что? Вы сказали, что cnt — это 115392. Этого не может быть, если c.jbg составляет 14 КБ. cnt тогда будет около 14 000. Что он?

Mark Adler 11.02.2023 09:24

'cnt' находится в битах, поэтому 115392 бита составляют около 14424 байтов. Может поэтому в списке файлов указан размер 14кб

Sahil Sharma 11.02.2023 09:36
cnt не в битах. Ваш код получает cnt напрямую из read(), который не возвращает биты. Вы нигде не умножаете cnt на восемь. Вы напечатали cnt, чтобы увидеть его значение?
Mark Adler 11.02.2023 19:09

О, очень жаль, что 115392 — это значение «nbr_bits», а «cnt» = 14424.

Sahil Sharma 11.02.2023 19:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
14
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как только вы разберетесь с цифрами, проблем не будет. Вы сжимаете двухуровневое изображение размером 57 КБ в JBIG-сжатие этого изображения размером 14 КБ. Ну в пределах ожидаемого.

Другие вопросы по теме