My filtering function is fairly straightforward. Given an image and a filter, it performs the following steps:
% loop through every relevant pixel on every color channel
for i=1+half_filter_width:(size(image,1)+half_filter_width)
for j=1+half_filter_height:(size(image,2)+half_filter_height)
for c = 1:3
center_x = i; center_y = j; pixel_value = 0;
filter_width_center = half_filter_width + 1;
filter_height_center = half_filter_height + 1;
% loop through each position in the filter, and update the value for the center pixel
for x_offset = 0:half_filter_width
for y_offset = 0:half_filter_height
% center pixel
if x_offset == 0 && y_offset == 0
pixel_value = pixel_value + padded_image(center_x,center_y,c)...
.* filter(filter_width_center, filter_height_center);
% top/bottom neighbors
elseif x_offset == 0
pixel_value = pixel_value + (padded_image(center_x,center_y+y_offset,c)...
.* filter(filter_width_center + x_offset, filter_height_center + y_offset))...
+ (padded_image(center_x,center_y-y_offset,c)...
.* filter(filter_width_center + x_offset, filter_height_center - y_offset));
% left/right neighbors
elseif y_offset == 0
pixel_value = pixel_value + (padded_image(center_x+x_offset,center_y,c)...
.* filter(filter_width_center + x_offset, filter_height_center + y_offset))...
+ (padded_image(center_x-x_offset,center_y,c)...
.* filter(filter_width_center + x_offset, filter_height_center - y_offset));
% corners
else
pixel_value = pixel_value + (padded_image(center_x+x_offset,center_y+y_offset,c)...
.* filter(filter_width_center + x_offset, filter_height_center + y_offset))...
+ (padded_image(center_x+x_offset,center_y-y_offset,c)...
.* filter(filter_width_center + x_offset, filter_height_center - y_offset))...
+ (padded_image(center_x-x_offset,center_y+y_offset,c)...
.* filter(filter_width_center - x_offset, filter_height_center + y_offset))...
+ (padded_image(center_x-x_offset,center_y-y_offset,c)...
.* filter(filter_width_center - x_offset, filter_height_center - y_offset));
end
end
end
% set the corresponding pixel in the output image to the proper value
output_image(i-half_filter_width,j-half_filter_height,c) = pixel_value;
end
end
end
output = output_image;
![]() ![]() ![]() |
![]() ![]() ![]() |
![]() ![]() ![]() |
![]() ![]() ![]() |
![]() ![]() ![]() |