diff --git a/1.jpg b/1.jpg new file mode 100644 index 0000000..d6bcb4f Binary files /dev/null and b/1.jpg differ diff --git a/2.JPG b/2.JPG new file mode 100644 index 0000000..a6cfa4a Binary files /dev/null and b/2.JPG differ diff --git a/3.JPG b/3.JPG new file mode 100644 index 0000000..b96347f Binary files /dev/null and b/3.JPG differ diff --git a/bhp.m b/bhp.m new file mode 100644 index 0000000..3775cb7 --- /dev/null +++ b/bhp.m @@ -0,0 +1,27 @@ +function res = bhp(F, d0, order) + +[m, n] = size(F); + +d = zeros(m, n); +H = zeros(m, n); + +for i = 1:m + for j = 1:n + d(i,j) = sqrt( (i-(m/2))^2 + (j-(n/2))^2); + end +end + +for i = 1:m + for j = 1:n + H(i,j) = 1 / (1+ (d0/d(i,j))^(2*order) ) ; + end +end + + +for i = 1:m + for j = 1:n + res(i,j) = (H(i,j)) * F(i,j); + end +end + + diff --git a/blp.m b/blp.m new file mode 100644 index 0000000..b18f5c0 --- /dev/null +++ b/blp.m @@ -0,0 +1,26 @@ +function res = blp(F, d0, order) + +[m, n] = size(F); + +d = zeros(m, n); +h = zeros(m, n); + +for i = 1:m + for j = 1:n + d(i,j) = sqrt( (i-(m/2))^2 + (j-(n/2))^2); + end +end + +for i = 1:m + for j = 1:n + h(i,j) = 1 / (1 + (d(i,j)/d0)^(2*order) ) ; + end +end + + +for i = 1:m + for j = 1:n + res(i,j) = (h(i,j)) * F(i,j); + end +end + diff --git a/ghp.m b/ghp.m new file mode 100644 index 0000000..7241a1d --- /dev/null +++ b/ghp.m @@ -0,0 +1,32 @@ +function res = ghp(F, d0) + +% inputs +% im is the fourier transform of the image +% thresh is the cutoff circle radius + +%outputs +% res is the filtered image + +[m,n] = size(F); + +d = zeros(m,n); +H = zeros(m,n); + +for i = 1:m + for j = 1:n + d(i,j) = sqrt( (i-(m/2))^2 + (j-(n/2))^2); + end +end + +for i = 1:m + for j = 1:n + H(i,j) = 1- exp ( -( (d(i,j)^2)/(2*(d0^2)) ) ); + end +end + + +for i = 1:m + for j = 1:n + res(i,j) = (H(i,j)) * F(i,j); + end +end diff --git a/glp.m b/glp.m new file mode 100644 index 0000000..1085758 --- /dev/null +++ b/glp.m @@ -0,0 +1,24 @@ +function res = glp(F, d0) + +[m, n] = size(F); + +d = double(zeros(m,n)); +h = double(zeros(m,n)); + +for i = 1:m + for j = 1:n + d(i,j) = sqrt( (i-(m/2))^2 + (j-(n/2))^2); + end +end + +for i = 1:m + for j = 1:n + h(i,j) = exp( -( (d(i,j)^2)/(2*((d0)^2)) ) ); + end +end + +for i = 1:m + for j = 1:n + res(i,j) = h(i,j) * F(i,j); + end +end diff --git a/ihp.m b/ihp.m new file mode 100644 index 0000000..ffbe64f --- /dev/null +++ b/ihp.m @@ -0,0 +1,31 @@ +function res = ihp(F, d0) + +[m, n] = size(F); + +d = zeros(m,n); +H = zeros(m,n); + +for i = 1:m + for j = 1:n + d(i,j) = sqrt( (i-(m/2))^2 + (j-(n/2))^2); + end +end + +for i = 1:m + for j = 1:n + if d(i,j) <= d0 + H(i,j) = 0; + else + H(i,j) = 1; + end + end +end + + +for i = 1:m + for j = 1:n + res(i,j) = (H(i,j)) * F(i,j); + end +end + + diff --git a/ilp.m b/ilp.m new file mode 100644 index 0000000..5bde2ff --- /dev/null +++ b/ilp.m @@ -0,0 +1,31 @@ +function res = ilp(F, d0) + +[m, n] = size(F); + +d = zeros(m,n); +H = zeros(m,n); + +for i = 1:m + for j = 1:n + d(i,j) = sqrt( (i-(m/2))^2 + (j-(n/2))^2); + end +end + +for i = 1:m + for j = 1:n + if d(i,j) <= d0 + H(i,j) = 1; + else + H(i,j) = 0; + end + end +end + + +for i = 1:m + for j = 1:n + res(i,j) = (H(i,j)) * F(i,j); + end +end + + diff --git a/prob1.m b/prob1.m new file mode 100644 index 0000000..1e2b701 --- /dev/null +++ b/prob1.m @@ -0,0 +1,92 @@ +clear; + +%Importing image +img = imread('2.JPG'); +[m, n, k] = size(img); +MN = m*n; + +%Computing Histogram Equalization for three channels +hImg = histEqu(img(:,:,1), m, n, MN); +hImg(:,:,2) = histEqu(img(:,:,2), m, n, MN); +hImg(:,:,3) = histEqu(img(:,:,3), m, n, MN); + + +%Displaying the result for three channel +figure, +subplot(2,3,1), +imshow(hImg(:,:,1)); +title('Red Image'); + +subplot(2,3,2), +imshow(hImg(:,:,2)); +title('Green Image'); + +subplot(2,3,3), +imshow(hImg(:,:,3)); +title('Blue Image'); + +subplot(2,3,4), +histogram(hImg(:,:,1)); +title('Red Image'); + +subplot(2,3,5), +histogram(hImg(:,:,2)); +title('Green Image'); + +subplot(2,3,6), +histogram(hImg(:,:,3)); +title('Blue Image'); + + +%Displaying the Histogram Equalized image +figure, +subplot(2,2,1), +imshow(img); +title('Original Image'); + +subplot(2,2,2), +histogram(img); +title('Original Image'); + +subplot(2,2,3), +imshow(hImg); +title('Equalized Image'); + +subplot(2,2,4), +histogram(hImg); +title('Equalized Image'); + + +function hImg = histEqu(Img, m, n, MN) + hImg=uint8(zeros(m, n)); + freq=zeros(256,1); + probf=zeros(256,1); + probc=zeros(256,1); + cum=zeros(256,1); + output=zeros(256,1); + + for i=1:m + for j=1:n + value=Img(i,j); + freq(value+1)=freq(value+1)+1; + end + end + probf=freq/MN; + + sum=0; + no_bins=255; + + for i=1:size(probf) + sum=sum+freq(i); + cum(i)=sum; + probc(i)=cum(i)/MN; + output(i)=round(probc(i)*no_bins); + end + + for i=1:m + for j=1:n + hImg(i,j)=output(Img(i,j)+1); + end + end + +end diff --git a/prob2.m b/prob2.m new file mode 100644 index 0000000..536ebca --- /dev/null +++ b/prob2.m @@ -0,0 +1,39 @@ +clear; + +%Importing image +img = imread('2.JPG'); +[m, n, k] = size(img); + +%Computing gamma transformation for three different gamma. +gamma = 5; +gamma1 = 2; +gamma2 = .5; +fimg = img; +fimg1 = img; +img2 = double(img); +fimg2 = img; +for i = 1:3 + fimg(:,:,i) = img(:,:,i) .^ gamma; + fimg1(:,:,i) = img(:,:,i) .^ gamma1; + fimg2(:,:,i) = img2(:,:,i) .^ gamma2; +end + + +%Displaying the result +figure, +subplot(2,2,1), +imshow(img); +title('Original Image'); + +subplot(2,2,2), +imshow(fimg); +title('Transform Image(Gamma=5)'); + +subplot(2,2,3), +imshow(fimg1); +title('Transform Image(Gamma=2)'); + +subplot(2,2,4), +imshow(fimg2); +title('Transform Image(Gamma=.5)'); + diff --git a/prob3.m b/prob3.m new file mode 100644 index 0000000..dc260ee --- /dev/null +++ b/prob3.m @@ -0,0 +1,62 @@ +clear; + +% Importing gray scale image +imgg = imread('3.JPG'); +img = imgg(:,:,1); +[m, n] = size(img); +sImg = img; +%sImg1 = img; + +% Filter definitation +w = [1 2 1 2 4 2 1 2 1]; +%w = [1 1 1 1 1 1 1 1 1]; +weight = sum(w); + +%Filtering the original Image +for i = 1:m + for j = 1:n + z = [getPixel(img, i-1, j-1, m,n), getPixel(img, i-1, j, m,n), getPixel(img, i-1, j+1, m,n), getPixel(img, i, j-1, m,n), getPixel(img, i, j, m,n), getPixel(img, i, j+1, m,n), getPixel(img, i+1, j-1, m,n), getPixel(img, i+1, j, m,n), getPixel(img, i+1, j+1, m,n)]; + sImg(i, j) = round(sum(int8(w) .* int8(z)) / weight); + end +end + + + + + + +%Filtering the original Image +for i = 1:m + for j = 1:n + z = [getPixel(img, i-1, j-1, m,n), getPixel(img, i-1, j, m,n), getPixel(img, i-1, j+1, m,n), getPixel(img, i, j-1, m,n), getPixel(img, i, j, m,n), getPixel(img, i, j+1, m,n), getPixel(img, i+1, j-1, m,n), getPixel(img, i+1, j, m,n), getPixel(img, i+1, j+1, m,n)]; + sImg1(i, j) = median(uint8(z)); + end +end + + +%Printing the Image and the histogram +figure, +subplot(2,2,1), +imshow(img); +title('Original Image'); + +subplot(2,2,2), +histogram(img); +title('Original Image'); + +subplot(2,2,3), +imshow(sImg); +title('Smoothen Image'); + +subplot(2,2,4), +imshow(sImg1); +title('Smoothen Image using Median filter'); + + +function pixl = getPixel(img, x, y, m, n) + if x < 1 || y < 1 || x >= m || y >= n + pixl = 0; + else + pixl = img(x, y); + end + diff --git a/prob4.m b/prob4.m new file mode 100644 index 0000000..7aa01ea --- /dev/null +++ b/prob4.m @@ -0,0 +1,64 @@ +clear; + +%Inporting Image +IMGG = imread('1.jpg'); +IMG = IMGG(:,:,1); +%Backup original image + +%Laplacian Filter Masks +W = [0 1 0;1 -4 1; 0 1 0]; +%W = [1 1 1;1 -8 1; 1 1 1]; + +%Padding the boundary with zeros +IMG = padarray(IMG,[1,1]); + +IMG1 = IMG; +I = zeros(size(IMG)); +IMG = double(IMG); + +%Computing the Laplasian mask +for i = 2:size(IMG,1)-1 + for j = 2:size(IMG,2)-1 + + I(i,j) = sum(sum(W .* IMG(i-1:i+1,j-1:j+1))); + end +end +I = uint8(I); + +%Sharpenend Image +B = IMG1 - I; + + +%Gradient Filter Masks +W = [-1 -2 -1; 0 0 0; 1 2 1]; +I = zeros(size(IMG)); +IMG = double(IMG); + +%Computing the Laplasian mask +for i = 2:size(IMG,1)-1 + for j = 2:size(IMG,2)-1 + I(i,j) = sum(sum(W .* IMG(i-1:i+1,j-1:j+1))); + end +end +I = uint8(I); + +%Sharpenend Image +B1 = IMG1 - I; + +%Displaying the result +figure, +subplot(2,2,1), +imshow(IMG1); +title('Original Image'); + +subplot(2,2,2), +imshow(I); +title('Laplacian Mask'); + +subplot(2,2,3), +imshow(B); +title('Laplacian Sharped Image'); + +subplot(2,2,4), +imshow(B1); +title('Gradient Sharped Image'); diff --git a/prob5.m b/prob5.m new file mode 100644 index 0000000..7c9124c --- /dev/null +++ b/prob5.m @@ -0,0 +1,71 @@ +% Frequency Domain Filters............ +clear; +%Importing image +imgg = imread('3.JPG'); +img = imgg(:,:,1); +cimg = double(img); +[m,n] = size(img); + +M = 2 * m; +C = 2 * n; + +pimg = zeros(M, C); +ctimg = zeros(M, C); + +%padding zeros +for i = 1:m + for j = 1:n + pimg(i,j) = cimg(i,j); + end +end + +%center the transform +for i = 1:m + for j = 1:n + ctimg(i,j) = pimg(i,j) * ((-1)^(i+j)); + end +end + + +%2D fast fourier transform +fimg = fft2(ctimg); + +order = 1; %order for butterworth filter +d0 = 10; % cutoff radius + +% % function call for low pass filters....................... + himg = glp(fimg, d0); % gaussian low pass filter +% himg = blp(fimg, d0, order); % butterworth low pass filter +%himg = ilp(fimg, d0); %ideal low pass filter + +%inverse 2D fast fourier transform +ifimg = ifft2(himg); + +for i = 1:M + for j = 1:C + ifimg(i,j) = ifimg(i,j) * ((-1)^(i+j)); + end +end + + +% removing the padding +for i = 1:m + for j = 1:n + rimg(i,j) = ifimg(i,j); + end +end + +% retaining the real parts of the matrix +rimg = real(rimg); +rimg = uint8(rimg); + + +figure; +subplot(2,3,1);imshow(img);title('Original Image'); +subplot(2,3,2);imshow(uint8(ctimg));title('Padding'); +subplot(2,3,3);imshow(uint8(fimg));title('Transform Centering'); +subplot(2,3,4);imshow(uint8(himg));title('Fourier Transform'); +subplot(2,3,5);imshow(uint8(ifimg));title('Inverse Fourier Transform'); +subplot(2,3,6);imshow(rimg);title('Smooth Image'); + + diff --git a/prob6.m b/prob6.m new file mode 100644 index 0000000..fee0d09 --- /dev/null +++ b/prob6.m @@ -0,0 +1,75 @@ +% Frequency Domain Filters............ +clear; +%Importing image +imgg = imread('1.jpg'); +img = imgg(:,:,1); +cimg = double(img); +[m,n] = size(img); + +M = 2 * m; +C = 2 * n; + +pimg = zeros(M, C); +ctimg = zeros(M, C); + +%padding zeros +for i = 1:m + for j = 1:n + pimg(i,j) = cimg(i,j); + end +end + +%center the transform +for i = 1:m + for j = 1:n + ctimg(i,j) = pimg(i,j)*((-1)^(i+j)); + end +end + + +%2D fast fourier transform +fimg = fft2(ctimg); + +order = 1; %order for butterworth filter +d0 = 10; % cutoff radius + +% % function calls for high pass filters..................... +%himg = ghp(fimg, d0); % gaussian low pass filter +%himg = bhp(fimg, d0, order); %butterworth high pass filter +himg = ihp(fimg, d0); %ideal high pass filter + +%inverse 2D fast fourier transform +ifimg = ifft2(himg); + +for i = 1:M + for j = 1:C + ifimg(i,j) = ifimg(i,j)*((-1)^(i+j)); + end +end + + +% removing the padding +for i = 1:m + for j = 1:n + rimg(i,j) = ifimg(i,j); + end +end + +% retaining the real parts of the matrix +rimg = real(rimg); +rimg = uint8(rimg); + + +figure; +subplot(2,3,1);imshow(img);title('Original Image'); +subplot(2,3,2);imshow(uint8(ctimg));title('Padding'); +subplot(2,3,3);imshow(uint8(fimg));title('Transform entering'); +subplot(2,3,4);imshow(uint8(himg));title('Fourier Transform'); +subplot(2,3,5);imshow(uint8(ifimg));title('Inverse Fourier Transform'); +subplot(2,3,6);imshow(rimg);title('Sharp Image'); + + + + + +