Deblocking изображений JPEG с использованием глубокого обучения

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

Сжатие изображений используется, чтобы уменьшить размер памяти изображения. Один из популярных и мощных методов сжатия используется в формате изображения JPEG, который использует коэффициент качества для определения величины сжатия. Уменьшение значения качества приводит к более высокому сжатию и меньшему объему памяти за счет визуального качества изображения.

Сжатие JPEG теряется, что означает, что процесс сжатия заставляет изображение терять информацию. Для изображений JPEG эта потеря информации появляется как программные продукты блокировки на изображении. Как показано на рисунке, большее сжатие приводит к большей потере информации и более сильным программным продуктам. Текстурированные области с высокочастотным содержимым, такие как трава и облака, выглядят размытыми. Острые края, такие как крыша дома и ограждения на вершине маяка, показывают звон.

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

Сеть DnCNN

Этот пример использует встроенную глубокую сверточную нейронную сеть с feedforward, называемую DnCNN. Сеть в первую очередь была предназначена для удаления шума от изображений. Однако архитектура DnCNN также может быть обучена удалению программных продуктов сжатия JPEG или увеличению разрешения изображения.

В ссылку статье [1] используется стратегия невязки обучения, что означает, что сеть DnCNN учится оценивать остаточное изображение. Остаточное изображение является различием между первозданным изображением и искаженной копией изображения. Остаточное изображение содержит информацию о искажении изображения. В данном примере искажение появляется как программные продукты блокировки JPEG.

Сеть DnCNN обучена обнаруживать остаточное изображение от яркости цветного изображения. Канал яркости изображения Y представляет яркость каждого пикселя через линейную комбинацию значений красного, зеленого и синего пикселей. Напротив, два канала цветности изображения, Cb и Cr, являются различными линейными комбинациями красных, зеленых и синих пиксельных значений, которые представляют информацию о цветовой разности. DnCNN обучается, используя только канал яркости, потому что восприятие человека более чувствительно к изменениям яркости, чем изменения цвета.

Если YOriginal яркость первозданного изображения и YCompressed- яркость изображения, содержащего программные продукты сжатия JPEG, тогда вход в сеть DnCNN равен YCompressed и сеть учится предсказывать YResidual=YCompressed-YOriginal из обучающих данных.

Когда сеть DnCNN узнает, как оценить остаточное изображение, она может восстановить неискаженную версию сжатого изображения JPEG путем добавления остаточного изображения к каналу сжатой яркости, затем преобразования изображения назад в цветовое пространство RGB.

Загрузка обучающих данных

Загрузите IAPR TC-12 Benchmark, который состоит из 20 000 все еще естественных изображений [2]. Набор данных включает фотографии людей, животных, городов и многое другое. Размер файла данных составляет ~ 1,8 ГБ. Если вы не хотите загружать обучающий набор обучающих данных, необходимый для обучения сети, то можно загрузить предварительно обученную сеть DnCNN, набрав load('pretrainedJPEGDnCNN.mat') в командной строке. Затем перейдите непосредственно к разделу Perform JPEG Deblocking Using DnCNN Network в этом примере.

Используйте функцию helper, downloadIAPRTC12Data, для загрузки данных. Эта функция присоединена к примеру как вспомогательный файл.

imagesDir = tempdir;
url = "http://www-i6.informatik.rwth-aachen.de/imageclef/resources/iaprtc12.tgz";
downloadIAPRTC12Data(url,imagesDir);

Этот пример обучит сеть с небольшим подмножеством данных IAPR TC-12 Benchmark. Загрузите обучающие данные imageCLEF. Все изображения являются 32-битными цветными изображениями JPEG.

trainImagesDir = fullfile(imagesDir,'iaprtc12','images','00');
exts = {'.jpg','.bmp','.png'};
imdsPristine = imageDatastore(trainImagesDir,'FileExtensions',exts);

Перечислите количество обучающих изображений.

numel(imdsPristine.Files)
ans = 251

Подготовка обучающих данных

Чтобы создать обучающие данные набор, считывайте в первозданных изображениях и выписывайте изображения в формате файла JPEG с различными уровнями сжатия.

Задайте значения качества изображений JPEG, используемые для визуализации программных продуктов сжатия изображений. Значения качества должны находиться в области значений [0, 100]. Небольшие значения качества приводят к более сжатию и более сильным программным продуктам сжатия. Используйте более плотную выборку небольших значений качества, чтобы обучающие данные имели широкую область значений программных продуктов сжатия.

JPEGQuality = [5:5:40 50 60 70 80];

Сжатые изображения хранятся на диске как файлы MAT в директории compressedImagesDir. Вычисленные остаточные изображения хранятся на диске в виде файлов MAT в директории residualImagesDir. Файлы MAT хранятся как тип данных double для большей точности при обучении сети.

compressedImagesDir = fullfile(imagesDir,'iaprtc12','JPEGDeblockingData','compressedImages');
residualImagesDir = fullfile(imagesDir,'iaprtc12','JPEGDeblockingData','residualImages');

Используйте функцию helper createJPEGDeblockingTrainingSet для предварительной обработки обучающих данных. Эта функция присоединена к примеру как вспомогательный файл.

Для каждого нетронутого обучающего изображения вспомогательная функция записывает копию изображения с фактором качества 100 для использования в качестве эталонного изображения и копий изображения с каждым фактором качества для использования в качестве входов сети. Функция вычисляет канал яркости (Y) опорного и сжатого изображений в типе данных double для большей точности при вычислении остаточных изображений. Сжатые изображения хранятся на диске как .MAT файлов в директории compressedDirName. Вычисленные остаточные изображения хранятся на диске как .MAT файлов в директории residualDirName.

[compressedDirName,residualDirName] = createJPEGDeblockingTrainingSet(imdsPristine,JPEGQuality);

Создайте Datastore извлечения случайных закрашенных фигур для обучения

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

В этом примере сетевые входы являются сжатыми изображениями. Желаемыми сетевыми характеристиками являются остаточные изображения. Создайте изображение datastore под названием imdsCompressed из набора файлов сжатого изображения. Создайте изображение datastore под названием imdsResidual из набора вычисленных файлов остаточных изображений. Оба хранилища данных требуют вспомогательной функции, matRead, для чтения данных изображения из файлов изображений. Эта функция присоединена к примеру как вспомогательный файл.

imdsCompressed = imageDatastore(compressedDirName,'FileExtensions','.mat','ReadFcn',@matRead);
imdsResidual = imageDatastore(residualDirName,'FileExtensions','.mat','ReadFcn',@matRead);

Создайте imageDataAugmenter (Deep Learning Toolbox), который задает параметры увеличения данных. Используйте увеличение данных во время обучения, чтобы изменить обучающие данные, что эффективно увеличивает объем доступных обучающих данных. Здесь augmenter задает случайное вращение на 90 степени и случайные отражения в направлении x.

augmenter = imageDataAugmenter( ...
    'RandRotation',@()randi([0,1],1)*90, ...
    'RandXReflection',true);

Создайте randomPatchExtractionDatastore из двух хранилищ данных изображений. Задайте размер закрашенной фигуры 50 на 50 пикселей. Каждое изображение генерирует 128 случайные закрашенные фигуры размера 50 на 50 пикселей. Задайте мини-пакет размером 128.

patchSize = 50;
patchesPerImage = 128;
dsTrain = randomPatchExtractionDatastore(imdsCompressed,imdsResidual,patchSize, ...
    'PatchesPerImage',patchesPerImage, ...
    'DataAugmentation',augmenter);
dsTrain.MiniBatchSize = patchesPerImage;

Datastore случайного извлечения закрашенных фигур dsTrain предоставляет мини-пакеты данных в сеть в итерацию эпохи. Предварительный просмотр результатов чтения из datastore.

inputBatch = preview(dsTrain);
disp(inputBatch)
      InputImage      ResponseImage 
    ______________    ______________

    {50×50 double}    {50×50 double}
    {50×50 double}    {50×50 double}
    {50×50 double}    {50×50 double}
    {50×50 double}    {50×50 double}
    {50×50 double}    {50×50 double}
    {50×50 double}    {50×50 double}
    {50×50 double}    {50×50 double}
    {50×50 double}    {50×50 double}

Настройка слоев DnCNN

Создайте слои встроенной сети DnCNN с помощью dnCNNLayers функция. По умолчанию глубина сети (количество слоев свертки) составляет 20.

layers = dnCNNLayers
layers = 
  1x59 Layer array with layers:

     1   'InputLayer'             Image Input           50x50x1 images
     2   'Conv1'                  Convolution           64 3x3x1 convolutions with stride [1  1] and padding [1  1  1  1]
     3   'ReLU1'                  ReLU                  ReLU
     4   'Conv2'                  Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
     5   'BNorm2'                 Batch Normalization   Batch normalization with 64 channels
     6   'ReLU2'                  ReLU                  ReLU
     7   'Conv3'                  Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
     8   'BNorm3'                 Batch Normalization   Batch normalization with 64 channels
     9   'ReLU3'                  ReLU                  ReLU
    10   'Conv4'                  Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'BNorm4'                 Batch Normalization   Batch normalization with 64 channels
    12   'ReLU4'                  ReLU                  ReLU
    13   'Conv5'                  Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    14   'BNorm5'                 Batch Normalization   Batch normalization with 64 channels
    15   'ReLU5'                  ReLU                  ReLU
    16   'Conv6'                  Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    17   'BNorm6'                 Batch Normalization   Batch normalization with 64 channels
    18   'ReLU6'                  ReLU                  ReLU
    19   'Conv7'                  Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    20   'BNorm7'                 Batch Normalization   Batch normalization with 64 channels
    21   'ReLU7'                  ReLU                  ReLU
    22   'Conv8'                  Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    23   'BNorm8'                 Batch Normalization   Batch normalization with 64 channels
    24   'ReLU8'                  ReLU                  ReLU
    25   'Conv9'                  Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    26   'BNorm9'                 Batch Normalization   Batch normalization with 64 channels
    27   'ReLU9'                  ReLU                  ReLU
    28   'Conv10'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    29   'BNorm10'                Batch Normalization   Batch normalization with 64 channels
    30   'ReLU10'                 ReLU                  ReLU
    31   'Conv11'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    32   'BNorm11'                Batch Normalization   Batch normalization with 64 channels
    33   'ReLU11'                 ReLU                  ReLU
    34   'Conv12'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    35   'BNorm12'                Batch Normalization   Batch normalization with 64 channels
    36   'ReLU12'                 ReLU                  ReLU
    37   'Conv13'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    38   'BNorm13'                Batch Normalization   Batch normalization with 64 channels
    39   'ReLU13'                 ReLU                  ReLU
    40   'Conv14'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    41   'BNorm14'                Batch Normalization   Batch normalization with 64 channels
    42   'ReLU14'                 ReLU                  ReLU
    43   'Conv15'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    44   'BNorm15'                Batch Normalization   Batch normalization with 64 channels
    45   'ReLU15'                 ReLU                  ReLU
    46   'Conv16'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    47   'BNorm16'                Batch Normalization   Batch normalization with 64 channels
    48   'ReLU16'                 ReLU                  ReLU
    49   'Conv17'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    50   'BNorm17'                Batch Normalization   Batch normalization with 64 channels
    51   'ReLU17'                 ReLU                  ReLU
    52   'Conv18'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    53   'BNorm18'                Batch Normalization   Batch normalization with 64 channels
    54   'ReLU18'                 ReLU                  ReLU
    55   'Conv19'                 Convolution           64 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    56   'BNorm19'                Batch Normalization   Batch normalization with 64 channels
    57   'ReLU19'                 ReLU                  ReLU
    58   'Conv20'                 Convolution           1 3x3x64 convolutions with stride [1  1] and padding [1  1  1  1]
    59   'FinalRegressionLayer'   Regression Output     mean-squared-error

Выбор опций обучения

Обучите сеть с помощью стохастического градиентного спуска с оптимизацией импульса (SGDM). Задайте установки гиперпараметров для SGDM при помощи trainingOptions (Deep Learning Toolbox) функция.

Обучение глубокой сети занимает много времени. Ускорите обучение, задав высокую скорость обучения. Однако это может заставить градиенты сети взрываться или расти бесконтрольно, препятствуя успешному обучению сети. Чтобы сохранить градиенты в значимой области значений, включите усечение градиента путем установки 'GradientThreshold' на 0.005, и задайте 'GradientThresholdMethod' для использования абсолютного значения градиентов.

maxEpochs = 30;
initLearningRate = 0.1;
l2reg = 0.0001;
batchSize = 64;

options = trainingOptions('sgdm', ...
    'Momentum',0.9, ...
    'InitialLearnRate',initLearningRate, ...
    'LearnRateSchedule','piecewise', ...
    'GradientThresholdMethod','absolute-value', ...
    'GradientThreshold',0.005, ...
    'L2Regularization',l2reg, ...
    'MiniBatchSize',batchSize, ...
    'MaxEpochs',maxEpochs, ...
    'Plots','training-progress', ...
    'Verbose',false);

Обучите сеть

По умолчанию пример загружает предварительно обученную сеть DnCNN. Предварительно обученная сеть позволяет вам выполнить деблокирование JPEG, не дожидаясь завершения обучения.

Чтобы обучить сеть, установите doTraining переменная в следующем коде, для true. Обучите сеть DnCNN с помощью trainNetwork (Deep Learning Toolbox) функция.

Обучите на графическом процессоре, если он доступен. Для использования GPU требуется Parallel Computing Toolbox™ и графический процессор с поддержкой CUDA ® NVIDIA ®. Для получения дополнительной информации смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Обучение занимает около 40 часов на NVIDIA™ Titan X.

doTraining = false; 
if doTraining  
    modelDateTime = string(datetime('now','Format',"yyyy-MM-dd-HH-mm-ss"));
    [net,info] = trainNetwork(dsTrain,layers,options);
    save(strcat("trainedJPEGDnCNN-",modelDateTime,"-Epoch-",num2str(maxEpochs),".mat"),'net');
else 
    load('pretrainedJPEGDnCNN.mat'); 
end

Теперь можно использовать сеть DnCNN, чтобы удалить программные продукты сжатия JPEG с изображений.

Выполните разблокировку JPEG с помощью сети DnCNN

Чтобы выполнить деблокировку JPEG с помощью DnCNN, выполните оставшиеся шаги этого примера. Остальная часть примера показывает, как:

  • Создайте выборки тестовых изображений с программными продуктами сжатия JPEG на трех разных уровнях качества.

  • Удалите программные продукты сжатия с помощью сети DnCNN.

  • Визуально сравните изображения до и после деблокировки.

  • Оцените качество сжатого и деблокированного изображений путем количественной оценки их подобия неискаженному эталонному изображению.

Создайте образцы изображений с блокирующими программными продуктами

Создайте образцы изображений, чтобы оценить результат деблокировки изображения JPEG с помощью сети DnCNN. Набор тестовых данных, testImages, содержит 21 неискаженное изображение, поставленное в Image Processing Toolbox™. Загрузите изображения в imageDatastore.

exts = {'.jpg','.png'};
fileNames = {'sherlock.jpg','car2.jpg','fabric.png','greens.jpg','hands1.jpg','kobi.png',...
    'lighthouse.png','micromarket.jpg','office_4.jpg','onion.png','pears.png','yellowlily.jpg',...
    'indiancorn.jpg','flamingos.jpg','sevilla.jpg','llama.jpg','parkavenue.jpg',...
    'peacock.jpg','car1.jpg','strawberries.jpg','wagon.jpg'};
filePath = [fullfile(matlabroot,'toolbox','images','imdata') filesep];
filePathNames = strcat(filePath,fileNames);
testImages = imageDatastore(filePathNames,'FileExtensions',exts);

Отобразите тестовые изображения как монтаж.

montage(testImages)

Выберите одно из изображений для использования в качестве эталонного изображения для деблокировки JPEG. Вы можете опционально использовать ваше собственное несжатое изображение в качестве ссылки изображения.

indx = 7; % Index of image to read from the test image datastore
Ireference = readimage(testImages,indx);
imshow(Ireference)
title('Uncompressed Reference Image')

Создайте три сжатых тестовых изображения с помощью Quality JPEG значений 10, 20 и 50.

imwrite(Ireference,fullfile(tempdir,'testQuality10.jpg'),'Quality',10);
imwrite(Ireference,fullfile(tempdir,'testQuality20.jpg'),'Quality',20);
imwrite(Ireference,fullfile(tempdir,'testQuality50.jpg'),'Quality',50);

Предварительная обработка сжатых изображений

Считайте сжатые версии изображения в рабочую область.

I10 = imread(fullfile(tempdir,'testQuality10.jpg'));
I20 = imread(fullfile(tempdir,'testQuality20.jpg'));
I50 = imread(fullfile(tempdir,'testQuality50.jpg'));

Отобразите сжатые изображения как монтаж.

montage({I50,I20,I10},'Size',[1 3])
title('JPEG-Compressed Images with Quality Factor: 50, 20 and 10 (left to right)')

Напомним, что DnCNN обучается с использованием только канала яркости изображения, потому что восприятие человека более чувствительно к изменениям яркости, чем изменения цвета. Преобразуйте сжатые JPEG изображения из цветового пространства RGB в цветовое пространство YCbCr с помощью rgb2ycbcr функция.

I10ycbcr = rgb2ycbcr(I10);
I20ycbcr = rgb2ycbcr(I20);
I50ycbcr = rgb2ycbcr(I50);

Применить сеть DnCNN

В порядок выполнения прямого прохода сети используйте denoiseImage функция. Эта функция использует точно такие же процедуры обучения и проверки для шумоподавления изображения. Можно представить программные продукты сжатия JPEG как тип шума изображения.

I10y_predicted = denoiseImage(I10ycbcr(:,:,1),net);
I20y_predicted = denoiseImage(I20ycbcr(:,:,1),net);
I50y_predicted = denoiseImage(I50ycbcr(:,:,1),net);

Каналы цветности не нуждаются в обработке. Конкатенируйте отлаженный канал яркости с исходными каналами цветности, чтобы получить отлаженное изображение в цветовом пространстве YCbCr.

I10ycbcr_predicted = cat(3,I10y_predicted,I10ycbcr(:,:,2:3));
I20ycbcr_predicted = cat(3,I20y_predicted,I20ycbcr(:,:,2:3));
I50ycbcr_predicted = cat(3,I50y_predicted,I50ycbcr(:,:,2:3));

Преобразуйте изображение YCbCr в цветовое пространство RGB при помощи ycbcr2rgb функция.

I10_predicted = ycbcr2rgb(I10ycbcr_predicted);
I20_predicted = ycbcr2rgb(I20ycbcr_predicted);
I50_predicted = ycbcr2rgb(I50ycbcr_predicted);

Отобразите отлаженные изображения как монтаж.

montage({I50_predicted,I20_predicted,I10_predicted},'Size',[1 3])
title('Deblocked Images with Quality Factor 50, 20 and 10 (Left to Right)')

Чтобы получить лучшее визуальное понимание улучшений, исследуйте меньшую область внутри каждого изображения. Задайте видимую область (ROI) с помощью вектора roi в формате [x y ширина высота]. Элементы определяют координаты x и y верхнего левого угла, ширину и высоту информация только для чтения.

roi = [30 440 100 80];

Обрезайте сжатые изображения в этот информация только для чтения и отобразите результат как montage.

i10 = imcrop(I10,roi);
i20 = imcrop(I20,roi);
i50 = imcrop(I50,roi);
montage({i50 i20 i10},'Size',[1 3])
title('Patches from JPEG-Compressed Images with Quality Factor 50, 20 and 10 (Left to Right)')

Обрезайте отлаженные изображения в этом информация только для чтения и отобразите результат как montage.

i10predicted = imcrop(I10_predicted,roi);
i20predicted = imcrop(I20_predicted,roi);
i50predicted = imcrop(I50_predicted,roi);
montage({i50predicted,i20predicted,i10predicted},'Size',[1 3])
title('Patches from Deblocked Images with Quality Factor 50, 20 and 10 (Left to Right)')

Количественное сравнение

Количественная оценка качества отлаженных изображений с помощью четырех метрик. Можно использовать displayJPEGResults вспомогательная функция для вычисления этих метрик для сжатых и деблокированных изображений с факторами качества 10, 20 и 50. Эта функция присоединена к примеру как вспомогательный файл.

  • Индекс структурного сходства (SSIM). SSIM оценивает визуальное влияние трех характеристик изображения: яркость, контрастность и структуру, по сравнению с ссылкой изображением. Чем ближе значение SSIM к 1, тем лучше тестовое изображение согласуется с ссылкой изображением. Здесь ссылка изображение является неискаженным оригинальным изображением, Ireference, перед сжатием JPEG. См. ssim для получения дополнительной информации об этой метрике.

  • Отношение пикового сигнала к шуму (PSNR). Чем больше значение PSNR, тем больше сигнал по сравнению с искажением. См. psnr для получения дополнительной информации об этой метрике.

  • Оценка качества изображений Naturalness (NIQE). NIQE измеряет качество перцептивного изображения с помощью модели, обученной из естественных сцен. Меньшие счета NIQE указывают на лучшее качество восприятия. См. niqe для получения дополнительной информации об этой метрике.

  • Слепой/бесфазный оценщик пространственного качества изображений (BRISQUE). BRISQUE измеряет качество воспринимаемого изображения с помощью модели, обученной из естественных сцен с искажением изображения. Меньшие счета BRISQUE указывают на лучшее качество восприятия. См. brisque для получения дополнительной информации об этой метрике.

displayJPEGResults(Ireference,I10,I20,I50,I10_predicted,I20_predicted,I50_predicted)
------------------------------------------
SSIM Comparison
===============
I10: 0.90624    I10_predicted: 0.91286
I20: 0.94904    I20_predicted: 0.95444
I50: 0.97238    I50_predicted: 0.97482
------------------------------------------
PSNR Comparison
===============
I10: 26.6046    I10_predicted: 27.0793
I20: 28.8015    I20_predicted: 29.3378
I50: 31.4512    I50_predicted: 31.8584
------------------------------------------
NIQE Comparison
===============
I10: 7.2194    I10_predicted: 3.9478
I20: 4.5158    I20_predicted: 3.0685
I50: 2.8874    I50_predicted: 2.4106
NOTE: Smaller NIQE score signifies better perceptual quality
------------------------------------------
BRISQUE Comparison
==================
I10: 52.372    I10_predicted: 38.9271
I20: 45.3772    I20_predicted: 30.8991
I50: 27.7093    I50_predicted: 24.3845
NOTE: Smaller BRISQUE score signifies better perceptual quality

Ссылки

[1] Zhang, K., W. Zuo, Y. Chen, D. Meng, and L. Zhang, «Beyond a Gaussian Denoiser: Learnual Learning of Deep CNN for Image Denoising». Транзакции IEEE ® по обработке изображений. Февраль 2017 года.

[2] Грубингер, М., П. Клаф, Х. Мюллер и Т. Дезелаерс. «IAPR TC-12 Benchmark: A New Evaluation Resource for Visual Information Systems». Сведения о языковых ресурсах OntoImage 2006 для поиска изображений на основе содержимого. Генуя, Италия. Том 5, май 2006, стр. 10.

См. также

| | | | | (Deep Learning Toolbox) | (Deep Learning Toolbox)

Похожие темы