mirror of
https://github.com/Karaka-Management/cOMS.git
synced 2026-02-17 18:58:39 +00:00
update
This commit is contained in:
parent
b91ee70f33
commit
06387d1193
|
|
@ -66,48 +66,14 @@ namespace Image {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
|
||||||
* @see https://en.wikipedia.org/wiki/Kernel_(image_processing)
|
|
||||||
* @see https://towardsdatascience.com/image-processing-with-python-blurring-and-sharpening-for-beginners-3bcebec0583a
|
|
||||||
* @see https://web.eecs.umich.edu/~jjcorso/t/598F14/files/lecture_0924_filtering.pdf
|
|
||||||
*/
|
|
||||||
static
|
static
|
||||||
cv::Mat convolve(cv::Mat in, const float kernel[][3])
|
cv::Mat convolve(cv::Mat in, const float kernel[][3])
|
||||||
{
|
{
|
||||||
cv::Size dim = in.size();
|
cv::Size dim = in.size();
|
||||||
cv::Mat out(in.size(), in.type());
|
cv::Mat out(in.size(), in.type());
|
||||||
|
|
||||||
int kernel_dimension = 3;
|
cv::Mat mKernel(3, 3, CV_32F, (float *) kernel);
|
||||||
|
cv::filter2D(in, out, -1, mKernel);
|
||||||
int kWidthRadius = (unsigned int) kernel_dimension >> 1;
|
|
||||||
int kHeightRadius = (unsigned int) kernel_dimension >> 1;
|
|
||||||
|
|
||||||
int newPixel;
|
|
||||||
cv::Vec3b p;
|
|
||||||
|
|
||||||
// @todo: implement @see https://rosettacode.org/wiki/Image_convolution
|
|
||||||
// @todo: not working yet
|
|
||||||
for (int i = dim.width - 1; i >= 0; --i) {
|
|
||||||
for (int j = dim.height - 1; j >= 0; --j) {
|
|
||||||
newPixel = 0;
|
|
||||||
|
|
||||||
for (int ki = kernel_dimension - 1; ki >= 0; --ki) {
|
|
||||||
for (int kj = kernel_dimension - 1; kj >= 0; --kj) {
|
|
||||||
p = in.at<cv::Vec3b>(
|
|
||||||
oms_min(oms_max(j + kj - kHeightRadius, 0), dim.height - 1),
|
|
||||||
oms_min(oms_max(i + ki - kWidthRadius, 0), dim.width - 1)
|
|
||||||
);
|
|
||||||
|
|
||||||
newPixel += kernel[ki][kj] * Image::ImageUtils::rgbToInt(p[2], p[1], p[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// bgr vs rgb
|
|
||||||
out.at<cv::Vec3b>(j, i)[0] = newPixel & 255;
|
|
||||||
out.at<cv::Vec3b>(j, i)[1] = (newPixel >> 8) & 255;
|
|
||||||
out.at<cv::Vec3b>(j, i)[2] = (newPixel >> 16) & 255;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace Image {
|
||||||
cv::Mat integralThresholding(cv::Mat in)
|
cv::Mat integralThresholding(cv::Mat in)
|
||||||
{
|
{
|
||||||
cv::Size dim = in.size();
|
cv::Size dim = in.size();
|
||||||
cv::Mat out(in.size(), in.type());
|
cv::Mat out(dim, in.type());
|
||||||
|
|
||||||
float intImg[dim.width][dim.height];
|
float intImg[dim.width][dim.height];
|
||||||
float sum;
|
float sum;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user