Zadanie 04
This commit is contained in:
parent
c724f79b2f
commit
25062ac7fc
@ -25,15 +25,32 @@ math::matrix<float> BlurGaussian::getMask(int size, Mode)
|
|||||||
{
|
{
|
||||||
math::matrix<float> mask(size, size);
|
math::matrix<float> mask(size, size);
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
Mode mode = RepeatEdge;
|
||||||
|
for (int i = 0; i<size; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j<size; j++)
|
||||||
|
{
|
||||||
|
mask(i, j) = getGauss(i-radius, j-radius, sigma);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
float BlurGaussian::getGauss(int x, int y, float sigma)
|
float BlurGaussian::getGauss(int x, int y, float sigma)
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
float pi = 3.14159265359f;
|
||||||
|
float e = 2.718281828459f;
|
||||||
|
|
||||||
return 0;
|
float g1 = (1 / (2 * pi*pow(sigma,2)));
|
||||||
|
|
||||||
|
float p1 = pow(x ,2) + pow(y ,2);
|
||||||
|
float p2 = (2 * pow(sigma, 2));
|
||||||
|
|
||||||
|
float g2 = pow(e,(-(p1) / p2));
|
||||||
|
|
||||||
|
float gauss = g1*g2;
|
||||||
|
|
||||||
|
return gauss;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,21 @@ PNM* BlurLinear::transform()
|
|||||||
|
|
||||||
math::matrix<float> mask(maskSize, maskSize);
|
math::matrix<float> mask(maskSize, maskSize);
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
int curr = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < maskSize; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < maskSize; j++)
|
||||||
|
{
|
||||||
|
mask(i, j) = tmpMask.at(curr).toDouble();
|
||||||
|
if (normalize)
|
||||||
|
{
|
||||||
|
mask(i, j) = mask(i, j) / sum(mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
curr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return convolute(mask, RepeatEdge);
|
return convolute(mask, RepeatEdge);
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,13 @@ math::matrix<float> BlurUniform::getMask(int size, Mode)
|
|||||||
{
|
{
|
||||||
math::matrix<float> mask(size, size);
|
math::matrix<float> mask(size, size);
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
for (int i = size; i-- != 0;)
|
||||||
|
{
|
||||||
|
for (int j = size; j-- != 0;)
|
||||||
|
{
|
||||||
|
mask(i, j) = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,14 @@ math::matrix<float> Convolution::getMask(int size, Mode mode = Normalize)
|
|||||||
{
|
{
|
||||||
math::matrix<float> mask(size, size);
|
math::matrix<float> mask(size, size);
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
for (int x = 0; x < size; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0 ; y < size; y++)
|
||||||
|
{
|
||||||
|
mask(x, y) = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mask(size / 2, size / 2) = 1;
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
@ -35,7 +42,49 @@ PNM* Convolution::convolute(math::matrix<float> mask, Mode mode = RepeatEdge)
|
|||||||
|
|
||||||
PNM* newImage = new PNM(width, height, image->format());
|
PNM* newImage = new PNM(width, height, image->format());
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
float weight = sum(mask);
|
||||||
|
QVector < Channel > cha;
|
||||||
|
if (image->format() == QImage::Format_Indexed8)
|
||||||
|
{
|
||||||
|
cha.push_back(LChannel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cha.push_back(RChannel);
|
||||||
|
cha.push_back(GChannel);
|
||||||
|
cha.push_back(BChannel);
|
||||||
|
}
|
||||||
|
float result[3];
|
||||||
|
|
||||||
|
for (int x = 0; x<width; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y<height; y++)
|
||||||
|
{
|
||||||
|
for (int c = 0; c<cha.size(); c++)
|
||||||
|
{
|
||||||
|
math::matrix<float> accum = join(mask, getWindow(x, y, mask.rowno(), cha[c], mode));
|
||||||
|
|
||||||
|
result[c] = sum(accum);
|
||||||
|
if (weight != 0) {
|
||||||
|
result[c] /= weight;
|
||||||
|
}
|
||||||
|
if (result[c] > 255) {
|
||||||
|
result[c] = 255;
|
||||||
|
}
|
||||||
|
else if (result[c] < 0) {
|
||||||
|
result[c] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (image->format() == QImage::Format_Indexed8) {
|
||||||
|
newImage->setPixel(x, y, result[0]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
newImage->setPixel(x, y, qRgb(result[0], result[1], result[2]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return newImage;
|
return newImage;
|
||||||
}
|
}
|
||||||
@ -48,7 +97,13 @@ const math::matrix<float> Convolution::join(math::matrix<float> A, math::matrix<
|
|||||||
int size = A.rowno();
|
int size = A.rowno();
|
||||||
math::matrix<float> C(size, size);
|
math::matrix<float> C(size, size);
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
for (int x = 0; x < size; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < size; y++)
|
||||||
|
{
|
||||||
|
C(x, y) = A(x, y) * B(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return C;
|
return C;
|
||||||
}
|
}
|
||||||
@ -57,11 +112,15 @@ const math::matrix<float> Convolution::join(math::matrix<float> A, math::matrix<
|
|||||||
const float Convolution::sum(const math::matrix<float> A)
|
const float Convolution::sum(const math::matrix<float> A)
|
||||||
{
|
{
|
||||||
float sum = 0.0;
|
float sum = 0.0;
|
||||||
|
for (int i = 0; i < A.rowno(); i++)
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
{
|
||||||
|
for (int j = 0; j < A.colno(); j++)
|
||||||
|
{
|
||||||
|
sum += A(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return sum;
|
return sum;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -71,7 +130,14 @@ const math::matrix<float> Convolution::reflection(const math::matrix<float> A)
|
|||||||
int size = A.rowno();
|
int size = A.rowno();
|
||||||
math::matrix<float> C(size, size);
|
math::matrix<float> C(size, size);
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
for (int x = 0; x < size; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < size; y++)
|
||||||
|
{
|
||||||
|
C(size - x, size - y) = A(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return C;
|
return C;
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,8 @@ QRgb Transformation::getPixel(int x, int y, Mode mode)
|
|||||||
*/
|
*/
|
||||||
QRgb Transformation::getPixelCyclic(int x, int y)
|
QRgb Transformation::getPixelCyclic(int x, int y)
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
x = image->width() % x;
|
||||||
|
y = image->height() % y;
|
||||||
|
|
||||||
return image->pixel(x,y);
|
return image->pixel(x,y);
|
||||||
}
|
}
|
||||||
@ -114,9 +115,14 @@ QRgb Transformation::getPixelCyclic(int x, int y)
|
|||||||
*/
|
*/
|
||||||
QRgb Transformation::getPixelNull(int x, int y)
|
QRgb Transformation::getPixelNull(int x, int y)
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
if (x >= image->width() || x < 0 || y >= image->height() || y < 0)
|
||||||
|
{
|
||||||
return image->pixel(x,y);
|
return qRgb(0, 0, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return image->pixel(x, y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -126,7 +132,23 @@ QRgb Transformation::getPixelNull(int x, int y)
|
|||||||
*/
|
*/
|
||||||
QRgb Transformation::getPixelRepeat(int x, int y)
|
QRgb Transformation::getPixelRepeat(int x, int y)
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
if (x < 0)
|
||||||
|
{
|
||||||
|
x = 0;
|
||||||
|
}
|
||||||
|
else if (x >= image->width())
|
||||||
|
{
|
||||||
|
x = image->width() - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (y < 0)
|
||||||
|
{
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
else if (y >= image->height())
|
||||||
|
{
|
||||||
|
y = image->height() - 1;
|
||||||
|
}
|
||||||
|
|
||||||
return image->pixel(x,y);
|
return image->pixel(x,y);
|
||||||
}
|
}
|
||||||
@ -138,7 +160,24 @@ math::matrix<float> Transformation::getWindow(int x, int y, int size,
|
|||||||
{
|
{
|
||||||
math::matrix<float> window(size,size);
|
math::matrix<float> window(size,size);
|
||||||
|
|
||||||
qDebug() << Q_FUNC_INFO << "Not implemented yet!";
|
int xNew = x - size / 2;
|
||||||
|
int yNew = y - size / 2;
|
||||||
|
|
||||||
|
for (int i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < size; j++)
|
||||||
|
{
|
||||||
|
QRgb col = getPixel(xNew + i, yNew + j, mode);
|
||||||
|
if (channel == RChannel) {
|
||||||
|
window(i, j) = qRed(col);
|
||||||
|
} else if (channel == GChannel) {
|
||||||
|
window(i, j) = qGreen(col);
|
||||||
|
} else {
|
||||||
|
window(i, j) = qBlue(col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user