Билинейная интерполяция на подизображениях в изображении - PullRequest
0 голосов
/ 11 октября 2011

Я делаю технику улучшения изображения, которая улучшает тусклое изображение. Я разделил изображение 640 x 480 на блоки по 16 изображений размером 160 x 120 и выполнил улучшение для каждого блока отдельно в зависимости от яркости каждого блока, а затем соединил все эти блоки обратно, чтобы сформировать окончательное изображение.

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


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

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

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

Я думаю, что интерполяция сгладит края, которые сформированы между двумя подизображениями. Есть ли другой способ исправить окончательное изображение, чтобы оно выглядело более гладким?

Надеюсь, приведенное выше объяснение сделает его более понятным. Код, приведенный ниже, является грубым кодом, а не фактическим кодом, который я использую. Код просто показывает, как работает метод, и после того, как усовершенствование выполнено, выглядит изображение.

    f=imread('3.jpg');
f=imresize(f,[480 640]);
figure(1);image(f);
f=rgb2ycbcr(f);
a=1;b=1;q=0;
f1=f(:,:,1);
for r=1:4
    for c=1:4
        sumterm = uint16(f1(30*r,40*c))+uint16(f1(30*r,80*c))+uint16(f1(30*r,120*c))+uint16(f1(60*r,40*c))+uint16(f1(60*r,80*c))+uint16(f1(60*r,120*c))+uint16(f1(90*r,40*c))+uint16(f1(90*r,80*c))+uint16(f1(90*r,120*c));
        q=q+1;
        for i=a:a+119
            for j=b:b+159
                if sumterm >=0 && sumterm <= 113
                    f1(i,j) =f1(i,j)*5;
                elseif sumterm > 113 && sumterm <=226
                    f1(i,j) =f1(i,j)*5;
                elseif sumterm >226 && sumterm <=339
                    f1(i,j) =f1(i,j)*4;
                elseif sumterm >339 && sumterm <=452
                    f1(i,j) =f1(i,j)*3;
                elseif sumterm >452 && sumterm <=565
                    f1(i,j) =f1(i,j)*2;
                elseif sumterm >565 && sumterm <=678
                    f1(i,j) =f1(i,j)*1.8;
                elseif sumterm >678 && sumterm <=791
                    f1(i,j) =f1(i,j)*1.6;
                elseif sumterm >791 && sumterm <=904
                    f1(i,j) =f1(i,j)*1.4;
                elseif sumterm >904 && sumterm <=1020
                    f1(i,j) =f1(i,j)*1.2;
                else
                    f1(i,j) =f1(i,j)*1;
                end
            end
        end
        if(b<640-160)
            b=j+1;
        end
    end

    a=i+1;
    b=1;


end
f(:,:,1)=f1;
f=ycbcr2rgb(f);
image(f);

1 Ответ

0 голосов
/ 11 октября 2011

Рассматривали ли вы выравнивание контрастности гистограммы ?


Поскольку мы говорим о сглаживании, медианный фильтр может быть вашим лучшим выбором.Посмотрите на его вывод в Википедии .Также проверьте Gaussian Blur .

...