#image-processing #scilab
#обработка изображений #scilab
Вопрос:
Я делаю свою домашнюю работу, и у меня возникла проблема. Моя задача — написать функцию в SciLab, которая преобразует обычное изображение в сепию. Я должен использовать алгоритм, который умножает красный цвет на альфа и синий цвет на бета, где альфа> 1 и бета < 1 и альфа бета = 2.
Это мой код. По какой-то причине эти 2 строки не работают должным образом:
//img2(i,j,2) = img(i,j);
//img2(i,j,3) = uint8(double(img(i,j))*beta);
function out = Ex2(im,alpha)
[h w d] = size(im);
img2 = uint16(zeros(h,w,d));
img = rgb2gray(im);
beta = 2-alpha;
for i=1:h
for j=1:w
img2(i,j,1) = uint16(double(img(i,j))*alpha); //condition if > 255
if img2(i,j,1) > 255 then
img2(i,j,1) = 255;
end
//img2(i,j,2) = img(i,j);
//img2(i,j,3) = uint8(double(img(i,j))*beta);
end
end
out = img2;
endfunction
Комментарии:
1. приведите примеры альфа- и бета-версий. Кроме того, что с
//
? это не комментарии matlab. Пожалуйста, опубликуйте реальную функцию matlab. Я предполагаю, что это может быть scilab?2. Кроме того, если я изменю код для чтения в MATLAB, это будет работать нормально, я получу очень красивые изображения в сепии
3. Да, это SciLab, помеченный также как MatLab, потому что я думаю, что эти 2 программы очень похожи, примером вызова этой функции является Ex2 (myimage, 1.2);
4. Я удалил тег MATLAB. Однако в MATLAB это работает как есть. если я запущу
imshow(Ex2(imread('peppers.png'),1.3))
, появится красивое изображение в сепии. Единственное, что я изменил, это синтаксис MATLAB (например, enfucntion), и я добавилout = uint8(img2);
в конце5. По какой-то причине, когда я пытаюсь запустить эту функцию в SciLab, она просто выдает мне синий загрузочный круг, поэтому я должен заставить SciLab остановить вызов этой функции.
Ответ №1:
Есть более простой способ получить результат
function sepia2(img)
img = rgb2gray(img);
img = uint16(img);
[h w] = size(img);
W = 30;
for i=1:h
for j=1:w
if (img(i,j) (2*W)) > 255 then
out(i,j,1) = 255;
else
out(i,j,1) = (img(i,j) (2*W));
end
if (img(i,j) (W)) > 255 then
out(i,j,2) = 255;
else
out(i,j,2) = (img(i,j) (W));
end
out(i,j,3) = img(i,j);
end
end
out = uint8(out);
imshow(out);
endfunction
img = imread('lena3.jpg');
sepia1(img);