This repository has been archived by the owner on Sep 21, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e699580
commit 3c87bfc
Showing
1 changed file
with
102 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,45 +1,102 @@ | ||
# Winforms Image Processing | ||
|
||
An application created in Winforms under C# for processing images. Allows applying various function and convolution filters among other functionalities. | ||
|
||
## Version specifications | ||
|
||
### Version v1.0 | ||
|
||
The initial version is specified by the following requirements: | ||
|
||
* Loading of a selected image file and displaying it in the application window | ||
* Applying selected filters to the loaded image and displaying result beside | ||
or in place of original image | ||
* Combining multiple filters on top of each other | ||
* Saving result image to a file | ||
* Returning filtered image back to its original state without reloading the | ||
file | ||
* Implementation of following function filters - with fixed parameters easily | ||
modifiable from the source code: | ||
* inversion, | ||
* brightness correction, | ||
* contrast enhancement, | ||
* gamma correction. | ||
* Implementation of following convolution filters | ||
* box blur, | ||
* Gaussian blur | ||
* sharpen, | ||
* edge detection | ||
* emboss | ||
|
||
Additionally, functionalities of convolution filters are extended by: | ||
|
||
* Separate area displaying rectangular grid with editable convolution filter | ||
kernel coefficients | ||
* Independent selection of numbers of kernel columns and rows. Values can | ||
be limited to an odd numbers from range [1, 9] | ||
* Editable field with filter divisor | ||
* Option to automatically compute divisor (sum of coefficients or 1 if the | ||
sum is 0) | ||
* Editable field with filter offset value | ||
* Selection of kernel anchor point, i.e. element of a grid which overlaps with | ||
currently processed pixel | ||
* Loading and editing existing filters, including predefined convolution filters specified in the common part | ||
* Saving created or modified filters in an application and applying them to | ||
the image | ||
# Image processing in C# Winforms | ||
|
||
This project aims to recreat various image/bitmap processing methods and algorithms in a C# Winforms environment. | ||
|
||
## Image processing features | ||
|
||
The following options are available for image processing. | ||
|
||
### Image processor window | ||
|
||
* Displays the original and modified image side by side | ||
* You can directly copy from the modified image context menu | ||
* You can select the image view mode from "fit" and "view original size" | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/1.png"> | ||
</p> | ||
|
||
### Filters | ||
|
||
* You can apply a wide variety of functional as well as convolution filters | ||
* You can add as many layers as you like | ||
* Order of applying filters is taken into account | ||
* A caching system stores each bitmap for a given order of filter layers | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/2.png"> | ||
</p> | ||
|
||
### Custom convolution kernel | ||
|
||
* Adds a custom kernel to the filters list | ||
* You can edit the kernel setup in a the Edit Kernel window | ||
* You can choose row and column count, kernel divisor (by default set automatically to sum of all cells), value offset and anchor point (wrt. applied cell) | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/3.png"> | ||
</p> | ||
|
||
### Filter options window | ||
|
||
* Changes the values used in certain filters | ||
* Reapplies all current layers | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/4.png"> | ||
</p> | ||
|
||
### YCbCr colorspace split | ||
|
||
* Displays the current (modified) image [YCbCr colorspace](https://en.wikipedia.org/wiki/YCbCr) split | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/5.png"> | ||
</p> | ||
|
||
## Bitmap creation features | ||
|
||
The following options are available for bitmap creation (accessible via the Drawing window) | ||
|
||
### Drawing window | ||
|
||
* A seperate window for all your bitmap creation needs | ||
* Allows saving and opening states (stored in serialized binary files) | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/6.png"> | ||
</p> | ||
|
||
### Shapes | ||
|
||
* Various shapes can be created simply by clicking | ||
* These are vector object shapes, stored and treated as objects (ie. circle has an origin point and a radius) | ||
* All shapes can be moved, redrawn or removed in the shapes menu (color and thickness taken into account while redrawing) | ||
* Polygons may be clipped | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/7.png"> | ||
</p> | ||
|
||
### Additional setup | ||
|
||
* Background color may be changed | ||
* Anti-aliasing may be turned on and off for shapes using midpoint lines | ||
* The clipping boundary may be displayed | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/8.png"> | ||
</p> | ||
|
||
### Filling | ||
|
||
* Point-based flood fill is available (and stored as separate object) | ||
* Polygons may be filled with specific colors or tiled images | ||
|
||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/julzerinos/csharp-image-processing/assets/9.png"> | ||
</p> | ||
|
||
## Final note | ||
|
||
If for some darn reason good ol' Microsoft Paint ain't satisfying all your image dillydallying needs, head on down to Joe's Peppercot Farms n' try out that dandy release in the right-as-the-Lord-himself -hand menu. God bless 🤠 |