ورود

View Full Version : L1-norm



sama.fa
چهارشنبه 06 خرداد 1394, 20:33 عصر
باسلام

من میخوام هرمقدار پیکسل از تصویرخروجی توسط L1-norm جایگزین پیکسل قبلی شود آیا کسی میتونه در این رابطه بهم راهنمایی کنه که چیکار باید انجام بدم؟؟؟؟؟؟؟:متفکر:
یا چطوری براش کد بنویسم؟؟؟؟

rahnema1
چهارشنبه 06 خرداد 1394, 21:42 عصر
سلام
لطفا بیشتر توضیح بدید چون l1norm تا جایی که می دونم همون مجموع قدر مطلق تصویر هست

absimg = abs(img);
L1Norm = sum(absimg(:));

sama.fa
پنج شنبه 07 خرداد 1394, 16:10 عصر
سلام

این متن انگلیسیشو اینجا قرار میدم که برای این قسمت L1-norm میخواستم باید چیکار کنم لطفا راهنمایی کنید ممنون

As the convolution outputs contain both real and imaginary parts, so each pixel value of the convolution output is replaced by the L1 norm of that pixel

sama.fa
پنج شنبه 07 خرداد 1394, 16:15 عصر
این کد برای L1-norm نیست؟؟

lambda = 8;
theta = 0;
psi = [0 pi/2];
gamma = 2;
bw = 1;
N = 8;
img_in = im2double(imread('D:\image\roz.png'));
img_in(:,:,2:3) = []; % discard redundant channels, it's gray anyway
img_out = zeros(size(img_in,1), size(img_in,2), N);
for n=1:N
gb = gabor_fn(bw,gamma,psi(1),lambda,theta)...
+ 1i * gabor_fn(bw,gamma,psi(2),lambda,theta);
% gb is the n-th gabor filter
img_out(:,:,n) = imfilter(img_in, gb, 'symmetric');
% filter output to the n-th channel
theta = theta + 2*pi/N;
% next orientation
end
figure(1);
imshow(img_in);
title('input image');
figure(2);
img_out_disp = sum(abs(img_out).^2, 3).^0.5;
% default superposition method, L2-norm
img_out_disp = img_out_disp./max(img_out_disp(:));
% normalize
figure(6);
imshow(img_out_disp);
title('gabor output, L-1 super-imposed, normalized');

rahnema1
پنج شنبه 07 خرداد 1394, 21:22 عصر
الان مشخص نیست که این convolution outputs که ذکر کردید چه ابعادی داره؟ با این یک خط مشخص نیست اگه منظورش یک تصویر باشه که شامل عدد مختلط باشه فقط لازمه abs گرفته بشه مگه اینکه مثلا سه بعدی باشه که لازمه sum هم گرفته بشه

sama.fa
جمعه 08 خرداد 1394, 16:59 عصر
دراینجا اول گفته موجک گابور بایک تصویر کانوال می کنیم بعد 40تا خروجی پیچیدگی بدست میاریم که شامل قسمت حقیقی وقسمت موهومی است بطوری که هر مقدارپیکسل از خروجی پیچیدگی
توسط L1-norm جایگزین پیکسل آن شده است .تصویر و کدی که برای این متن نوشتم رو اینجا قرار میدهم اگه کدی که اینجاقرار دادم ایراد داره لطفا شماراهنمایی کنید؟؟؟/

ممنون میشم

عکس:
131776

کد:

close all;
clear all;
clc;

I = imread('D:\image\roz.png');
I2 = imcrop(I,[20.7 46.6 50 50]);
I2 = rgb2gray(I2);
I2 = im2double(I2);
[R C]=size(I2);
% R = 128;
% C = 128;
Kmax = pi/3 ;
f = sqrt(1 );
Delt = 2*pi/3;
Delt2 = Delt * Delt;

feature=[];
% Show the Gabor Wavelets
for v = 0 : 4
for u = 1 :8
GW = GaborWavelet ( R, C, Kmax, f, u, v, Delt2 ); % Create the Gabor wavelets
figure( 2 );
subplot( 5, 8, v *8+ u ),imshow ( real( GW ) ,[]);% Show the real part of Gabor wavelets
lambda = 8;
theta = 0;
psi = [0 pi/2];
gamma = 2;
bw = 1;
N = 8;
img_in = im2double(imread('D:\image\roz.png'));
img_in(:,:,2:3) = []; % discard redundant channels, it's gray anyway
img_out = zeros(size(img_in,1), size(img_in,2), N);
for n=1:N
gb = gabor_fn(bw,gamma,psi(1),lambda,theta)...
+ 1i * gabor_fn(bw,gamma,psi(2),lambda,theta);
% gb is the n-th gabor filter
img_out(:,:,n) = imfilter(img_in, gb, 'symmetric');
% filter output to the n-th channel
theta = theta + 2*pi/N;
% next orientation
end
figure(1);
imshow(img_in);
title('input image');
figure(2);
img_out_disp = sum(abs(img_out).^2, 3).^0.5;
% default superposition method, L2-norm
img_out_disp = img_out_disp./max(img_out_disp(:));
% normalize
figure(6);
imshow(img_out_disp);
title('gabor output, L-1 super-imposed, normalized');

IGW=conv2(I2 ,GW,'same');
% IGW=conv((Img),(figure ( 2 )));
figure ( 3 );
subplot( 5, 8, v * 8 + u ),imshow ( abs( IGW ) ,[]);

im=imresize(IGW,[21 21]);
for i=1:3:18
for j=1:3:18
feature=[feature sum(sum(im(i:i+2,j:j+2)))/9];
end
end

end

end

rahnema1
جمعه 08 خرداد 1394, 22:40 عصر
با این توضیحاتی که ارائه کردید اینجور تغییر دادم

close all;
clear all;
clc;

I = imread('D:\image\roz.png');
I2 = imcrop(I,[20.7 46.6 50 50]);
I2 = rgb2gray(I2);
I2 = im2double(I2);
[R C]=size(I2);
% R = 128;
% C = 128;
Kmax = pi/3 ;
f = sqrt(1 );
Delt = 2*pi/3;
Delt2 = Delt * Delt;

feature=[];
% Show the Gabor Wavelets
convolution_output = []
conv_iter= 1;
for v = 0 : 4
for u = 1 :8
GW = GaborWavelet ( R, C, Kmax, f, u, v, Delt2 ); % Create the Gabor wavelets
IGW=conv2(I2 ,GW,'same');
convolution_output(: , :, conv_iter) = IGW;
conv_iter = conv_iter + 1;
end
end
L1_norm = sum(abs(convolution_output) , 3);

sama.fa
شنبه 09 خرداد 1394, 12:58 عصر
ممنون ازشما ولی مهندس اصلا جواب نمیده هم اون شکلی که میخوام در نمیاد هم این قسمت convolution_output خالی در میاد اخر سر

rahnema1
شنبه 09 خرداد 1394, 13:43 عصر
با توجه به توضیحات شما اینجور برداشت کردم ضمنا مهندس خودتی!

sama.fa
چهارشنبه 17 تیر 1394, 15:05 عصر
من برای اینکه از تصویر L1_norm بگیرم این کارو کردم
کد:
close all;
clear all;
clc;

I = imread('D:\image\roz.png');
I2 = imcrop(I,[20.7 46.6 50 50]);
I2 = rgb2gray(I2);
I2 = im2double(I2);
[R C]=size(I2);
% R = 128;
% C = 128;
Kmax = pi/3 ;
f = sqrt(1 );
Delt = 2*pi/3;
Delt2 = Delt * Delt;


% Show the Gabor Wavelets
for v = 0 : 4
for u = 1 :8
GW = GaborWavelet ( R, C, Kmax, f, u, v, Delt2 ); % Create the Gabor wavelets
figure( 2 );
subplot( 5, 8, v *8+ u ),imshow ( real( GW ) ,[]);% Show the real part of Gabor wavelets
lambda = 8;
theta = 0;
psi = [0 pi/2];
gamma = 2;
bw = 1;
N = 8;
img_in = im2double(imread('D:\image\roz.png'));
img_in(:,:,2:3) = []; % discard redundant channels, it's gray anyway
img_out = zeros(size(img_in,1), size(img_in,2), N);
for n=1:N
gb = gabor_fn(bw,gamma,psi(1),lambda,theta)...
+ 1i * gabor_fn(bw,gamma,psi(2),lambda,theta);
% gb is the n-th gabor filter
img_out(:,:,n) = imfilter(img_in, gb, 'symmetric');
% filter output to the n-th channel
theta = theta + 2*pi/N;
% next orientation
end
figure(1);
imshow(img_in);
title('input image');
figure(2);
img_out_disp = sum(abs(img_out).^2, 3).^0.5;
% default superposition method, L2-norm
img_out_disp = img_out_disp./max(img_out_disp(:));
% normalize
figure(6);
imshow(img_out_disp);
title('gabor output, L-1 super-imposed, normalized');

IGW=conv2(I2 ,GW,'same');

figure ( 3 );
subplot( 5, 8, v * 8 + u ),imshow ( abs( IGW ) ,[]);

end

end
که تصویرهایی که از این کد بدست اومده رو هم در زیر قرار دادم .

rahnema1
جمعه 19 تیر 1394, 16:02 عصر
سلام
چرا فیلتر ها یکسان هسنتند مگه قرار نیست با scale های مختلف باشند؟
فکر کنم اون حلقه ای که gabor_fn داخلش هست اضافیه

sama.fa
جمعه 19 تیر 1394, 16:28 عصر
پس باید چیکار کنم؟
اون حلقه رو حدف کردنی کلا جواب نمیده میشه بگین چیکارکنم چهجور L1_norm بگیرم؟؟

rahnema1
جمعه 19 تیر 1394, 16:52 عصر
شکلی شبیه خودش نتونستم ایجاد کنم
ضمن اینکه عکسی هم که از اون خروجی های convolution توی مقاله گذاشته از یه جای دیگه کپی شده! منظورم اون 40 تا عکس سیاهرنگ هست
شما دستور GaborExample2 را اجرا کنید
http://www.sharefile.ir/uploads/1436586123.zip

sama.fa
جمعه 19 تیر 1394, 16:58 عصر
این خطارو میده اجرا نمیشه
Undefined function 'real' for input arguments of type 'cell

rahnema1
جمعه 19 تیر 1394, 17:13 عصر
برنامه را اصلاح کردم توی پست بالا

sama.fa
جمعه 19 تیر 1394, 17:20 عصر
باز همون خطارو میده

rahnema1
جمعه 19 تیر 1394, 17:24 عصر
باز هم اصلاح کردم

sama.fa
جمعه 19 تیر 1394, 17:30 عصر
ممنون از شما اجراشد ولی این خطارو هم داد
Warning: CONV2 on values of class UINT8 is obsolete
.
Use CONV2(DOUBLE(A),DOUBLE(B)) or
CONV2(SINGLE(A),SINGLE(B)) instead

فقط یه سوال مگه اون کدی که من در تاپیک قرار داده بودم برای L1_norm اشتباه بود؟؟ولی اون شکلی که میخواست مقاله دراومده بود

sama.fa
جمعه 19 تیر 1394, 17:37 عصر
این کارو کردم دیگه خطای قبلی رو نداد

img = imread('D:\image\roz.png');
img = im2double(img);

rahnema1
جمعه 19 تیر 1394, 17:38 عصر
خطا نیست warning هست. بهتره قبل از هر چیز img به double تبدیل بشه
برنامه شما تکرار یک چیز بود یعنی چون scale ها یکسان بود برنامه شما یک کار یکسان را به صورت تکراری انجام می داد
اما اینجا scale ها تغییر می کنه و همین طور که می بینید اندازه فیلتر ها با هم متفاوته