Add false color rendering

This commit is contained in:
2023-06-02 20:41:34 +02:00
parent 77c312800a
commit ab245f0484
8 changed files with 35 additions and 3 deletions
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 947 B

+7
View File
@@ -274,6 +274,12 @@ void ImageWidget::invert(bool enable)
update();
}
void ImageWidget::falseColor(bool enable)
{
m_falseColor = enable;
update();
}
QImage ImageWidget::renderToImage()
{
if(m_imgWidth < 0)return QImage();
@@ -402,6 +408,7 @@ void ImageWidget::paintGL()
m_program->setUniformValue("mtf_param", m_low, m_mid, m_high);
m_program->setUniformValue("zoom", 1.0f/m_scale);
m_program->setUniformValue("bw", m_bwImg && !m_superpixel);
m_program->setUniformValue("false_color", m_falseColor && m_bwImg);
m_program->setUniformValue("invert", m_invert);
if(m_superpixel)m_program->setUniformValue("whiteBalance", m_whiteBalance[0], m_whiteBalance[1], m_whiteBalance[2]);
else m_program->setUniformValue("whiteBalance", 1.0f, 1.0f, 1.0f);
+2
View File
@@ -57,6 +57,7 @@ class ImageWidget : public QOpenGLWidget
float m_whiteBalance[3] = {1.0f, 1.0f, 1.0f};
bool m_blockRepaint;
bool m_bwImg;
bool m_falseColor = false;
bool m_invert;
bool m_superpixel;
bool m_showThumbnails;
@@ -85,6 +86,7 @@ public slots:
void setOffset(float dx, float dy);
void superPixel(bool enable);
void invert(bool enable);
void falseColor(bool enable);
QImage renderToImage();
void thumbnailLoaded(const Image *image);
void showThumbnail(bool enable);
+1
View File
@@ -84,6 +84,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
connect(m_stretchPanel, &StretchToolbar::autoStretch, [&](){ m_stretchPanel->stretchImage(m_ringList->currentImage().get()); });
connect(m_stretchPanel, &StretchToolbar::invert, m_imageGL->imageWidget(), &ImageWidget::invert);
connect(m_stretchPanel, &StretchToolbar::superPixel, m_imageGL->imageWidget(), &ImageWidget::superPixel);
connect(m_stretchPanel, &StretchToolbar::falseColor, m_imageGL->imageWidget(), &ImageWidget::falseColor);
m_ringList = new ImageRingList(m_database, nameFilter, this);
m_filesystem = new FilesystemWidget(m_ringList, this);
+4 -3
View File
@@ -17,14 +17,15 @@
<file>shaders/thumb.vert</file>
<file>shaders/debayer.frag</file>
<file>shaders/debayer.vert</file>
<file>falsecolor.png</file>
</qresource>
<qresource lang="en" prefix="/">
<qresource prefix="/" lang="en">
<file alias="help">about/help_en</file>
</qresource>
<qresource lang="sk" prefix="/">
<qresource prefix="/" lang="sk">
<file alias="help">about/help_sk</file>
</qresource>
<qresource lang="fr" prefix="/">
<qresource prefix="/" lang="fr">
<file alias="help">about/help_fr</file>
</qresource>
</RCC>
+16
View File
@@ -5,6 +5,7 @@ uniform vec3 mtf_param;
uniform bool bw;
uniform bool invert;
uniform bool srgb;
uniform bool false_color;
uniform vec3 whiteBalance;
in vec2 qt_TexCoord0;
layout(location = 0) out vec4 color;
@@ -23,6 +24,20 @@ vec4 MTF(vec4 x, vec3 m)
return ((m.y - 1) * x) / ((2 * m.y - 1) * x - m.y);
}
vec3 falsecolor(float color)
{
const vec3 pallete[] = vec3[](
vec3(1.0, 0.0, 1.0), //magneta
vec3(0.0, 0.0, 1.0), //blue
vec3(0.0, 1.0, 1.0), //cyan
vec3(0.0, 1.0, 0.0), //green
vec3(1.0, 1.0, 0.0), //yellow
vec3(1.0, 0.0, 0.0), vec3(1.0, 0.0, 0.0));//red
color *= 5.0;
int i = int(color);
return mix(pallete[i], pallete[i+1], fract(color));
}
vec3 checker()
{
vec2 pattern = fract(gl_FragCoord.xy * 0.0625) - 0.5;
@@ -34,6 +49,7 @@ void main(void)
color = texture(qt_Texture0, qt_TexCoord0);
if(bw)color = color.rrra;
color = MTF(color, mtf_param);
if(false_color)color.rgb = falsecolor(color.r);
if(invert)color.rgb = vec3(1.0) - color.rgb;
+4
View File
@@ -34,6 +34,10 @@ StretchToolbar::StretchToolbar(QWidget *parent) : QToolBar(tr("Stretch toolbar")
invertButton->setCheckable(true);
connect(invertButton, SIGNAL(toggled(bool)), this, SIGNAL(invert(bool)));
QAction *falseColorButton = addAction(QIcon(":/falsecolor.png"), tr("False color"));
falseColorButton->setCheckable(true);
connect(falseColorButton, SIGNAL(toggled(bool)), this, SIGNAL(falseColor(bool)));
QAction *superPixelButton = addAction(QIcon(":/bayer.png"), tr("Debayer CFA"));
superPixelButton->setCheckable(true);
connect(superPixelButton, SIGNAL(toggled(bool)), this, SIGNAL(superPixel(bool)));
+1
View File
@@ -22,6 +22,7 @@ signals:
void autoStretch();
void invert(bool enable);
void superPixel(bool enable);
void falseColor(bool enable);
};
#endif // STRETCHTOOLBAR_H